Files
GiGaMaskTime/Pods/LKDBHelper/LKDBHelper/Helper/LKDBUtils.m
T
2018-08-22 11:15:52 +08:00

242 lines
6.9 KiB
Objective-C

//
// NSObject+LKUtils.m
// LKDBHelper
//
// Created by LJH on 13-4-15.
// Copyright (c) 2013年 ljh. All rights reserved.
//
#import "LKDBUtils.h"
@interface LKDateFormatter : NSDateFormatter
@property (nonatomic, strong) NSRecursiveLock *lock;
@end
@implementation LKDateFormatter
- (id)init
{
self = [super init];
if (self) {
self.lock = [[NSRecursiveLock alloc] init];
self.generatesCalendarDates = YES;
self.dateStyle = NSDateFormatterNoStyle;
self.timeStyle = NSDateFormatterNoStyle;
self.AMSymbol = nil;
self.PMSymbol = nil;
NSLocale *locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
if (locale) {
[self setLocale:locale];
}
}
return self;
}
//防止在IOS5下 多线程 格式化时间时 崩溃
- (NSDate *)dateFromString:(NSString *)string
{
[_lock lock];
NSDate *date = [super dateFromString:string];
[_lock unlock];
return date;
}
- (NSString *)stringFromDate:(NSDate *)date
{
[_lock lock];
NSString *string = [super stringFromDate:date];
[_lock unlock];
return string;
}
@end
@interface LKNumberFormatter : NSNumberFormatter
@end
@implementation LKNumberFormatter
- (NSString *)stringFromNumber:(NSNumber *)number
{
NSString *string = [number stringValue];
if (!string) {
string = [NSString stringWithFormat:@"%lf", [number doubleValue]];
}
return string;
}
- (NSNumber *)numberFromString:(NSString *)string
{
NSNumber *number = [super numberFromString:string];
if (!number) {
number = @(string.doubleValue);
}
return number;
}
@end
@implementation LKDBUtils
+ (BOOL)createDirectoryWithFilePath:(NSString *)filePath
{
NSString *dirPath = filePath.stringByDeletingLastPathComponent;
if (!dirPath) {
return NO;
}
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL isDir = NO;
BOOL isCreated = [fileManager fileExistsAtPath:dirPath isDirectory:&isDir];
#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED
NSDictionary *attributes = @{NSFileProtectionKey: NSFileProtectionNone};
#else
NSDictionary *attributes = nil;
#endif
if (!isCreated || !isDir) {
NSError *error = nil;
BOOL success = [fileManager createDirectoryAtPath:dirPath
withIntermediateDirectories:YES
attributes:attributes
error:&error];
if (!success) {
LKErrorLog(@"create dir error: %@", error.debugDescription);
/// 下个主线程继续尝试次
dispatch_async(dispatch_get_main_queue(), ^{
[fileManager createDirectoryAtPath:dirPath
withIntermediateDirectories:YES
attributes:attributes
error:nil];
});
}
return success;
} else {
/**
* @brief Disk I/O error when device is locked
* https://github.com/ccgus/fmdb/issues/262
*/
#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED
[fileManager setAttributes:attributes
ofItemAtPath:dirPath
error:nil];
#endif
return YES;
}
}
+ (NSString *)getDocumentPath
{
#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
return documentsDirectory;
#else
NSString *homePath = [[NSBundle mainBundle] resourcePath];
return homePath;
#endif
}
+ (NSString *)getDirectoryForDocuments:(NSString *)dir
{
NSString *dirPath = [[self getDocumentPath] stringByAppendingPathComponent:dir];
BOOL isDir = NO;
BOOL isCreated = [[NSFileManager defaultManager] fileExistsAtPath:dirPath isDirectory:&isDir];
if (isCreated == NO || isDir == NO) {
NSError *error = nil;
BOOL success = [[NSFileManager defaultManager] createDirectoryAtPath:dirPath withIntermediateDirectories:YES attributes:nil error:&error];
if (success == NO)
NSLog(@"create dir error: %@", error.debugDescription);
}
return dirPath;
}
+ (NSString *)getPathForDocuments:(NSString *)filename
{
return [[self getDocumentPath] stringByAppendingPathComponent:filename];
}
+ (NSString *)getPathForDocuments:(NSString *)filename inDir:(NSString *)dir
{
return [[self getDirectoryForDocuments:dir] stringByAppendingPathComponent:filename];
}
+ (BOOL)isFileExists:(NSString *)filepath
{
return [[NSFileManager defaultManager] fileExistsAtPath:filepath];
}
+ (BOOL)deleteWithFilepath:(NSString *)filepath
{
return [[NSFileManager defaultManager] removeItemAtPath:filepath error:nil];
}
+ (NSArray *)getFilenamesWithDir:(NSString *)dir
{
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *fileList = [fileManager contentsOfDirectoryAtPath:dir error:nil];
return fileList;
}
+ (BOOL)checkStringIsEmpty:(NSString *)string
{
if (string == nil) {
return YES;
}
if ([string isKindOfClass:[NSString class]] == NO) {
return YES;
}
if (string.length == 0) {
return YES;
}
return [[self getTrimStringWithString:string] isEqualToString:@""];
}
+ (NSString *)getTrimStringWithString:(NSString *)string
{
return [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}
+ (NSDateFormatter *)getDBDateFormat
{
static NSDateFormatter *format;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
format = [[LKDateFormatter alloc] init];
format.dateFormat = @"yyyy-MM-dd HH:mm:ss";
});
return format;
}
+ (NSString *)stringWithDate:(NSDate *)date
{
NSDateFormatter *formatter = [self getDBDateFormat];
NSString *datestr = [formatter stringFromDate:date];
if (datestr.length > 19) {
datestr = [datestr substringToIndex:19];
}
return datestr;
}
+ (NSDate *)dateWithString:(NSString *)str
{
NSDateFormatter *formatter = [self getDBDateFormat];
NSDate *date = [formatter dateFromString:str];
return date;
}
+ (NSNumberFormatter *)numberFormatter
{
static NSNumberFormatter *numberFormatter = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
numberFormatter = [[LKNumberFormatter alloc] init];
});
return numberFormatter;
}
@end
inline NSString *LKSQLTypeFromObjcType(NSString *objcType)
{
if ([LKSQL_Convert_IntType rangeOfString:objcType].length > 0) {
return LKSQL_Type_Int;
}
if ([LKSQL_Convert_FloatType rangeOfString:objcType].length > 0) {
return LKSQL_Type_Double;
}
if ([LKSQL_Convert_BlobType rangeOfString:objcType].length > 0) {
return LKSQL_Type_Blob;
}
return LKSQL_Type_Text;
}
@implementation LKDBQueryParams
@end