Files
ManagerDemo/Pods/DTFoundation/Core/Source/NSString+DTPaths.m
T
2014-08-08 13:27:54 +08:00

116 lines
3.0 KiB
Objective-C

//
// NSString+DTPaths.m
// DTFoundation
//
// Created by Oliver Drobnik on 2/15/12.
// Copyright (c) 2012 Cocoanetics. All rights reserved.
//
#import "NSString+DTPaths.h"
@implementation NSString (DTPaths)
#pragma mark Standard Paths
+ (NSString *)cachesPath
{
static dispatch_once_t onceToken;
static NSString *cachedPath;
dispatch_once(&onceToken, ^{
cachedPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
});
return cachedPath;
}
+ (NSString *)documentsPath
{
static dispatch_once_t onceToken;
static NSString *cachedPath;
dispatch_once(&onceToken, ^{
cachedPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
});
return cachedPath;
}
#pragma mark Temporary Paths
+ (NSString *)temporaryPath
{
static dispatch_once_t onceToken;
static NSString *cachedPath;
dispatch_once(&onceToken, ^{
cachedPath = NSTemporaryDirectory();
});
return cachedPath;
}
+ (NSString *)pathForTemporaryFile
{
CFUUIDRef newUniqueId = CFUUIDCreate(kCFAllocatorDefault);
CFStringRef newUniqueIdString = CFUUIDCreateString(kCFAllocatorDefault, newUniqueId);
NSString *tmpPath = [[NSString temporaryPath] stringByAppendingPathComponent:(__bridge NSString *)newUniqueIdString];
CFRelease(newUniqueId);
CFRelease(newUniqueIdString);
return tmpPath;
}
#pragma mark Working with Paths
- (NSString *)pathByIncrementingSequenceNumber
{
NSString *baseName = [self stringByDeletingPathExtension];
NSString *extension = [self pathExtension];
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\(([0-9]+)\\)$" options:0 error:NULL];
__block NSInteger sequenceNumber = 0;
[regex enumerateMatchesInString:baseName options:0 range:NSMakeRange(0, [baseName length]) usingBlock:^(NSTextCheckingResult *match, NSMatchingFlags flags, BOOL *stop){
NSRange range = [match rangeAtIndex:1]; // first capture group
NSString *substring= [self substringWithRange:range];
sequenceNumber = [substring integerValue];
*stop = YES;
}];
NSString *nakedName = [baseName pathByDeletingSequenceNumber];
if ([extension isEqualToString:@""])
{
return [nakedName stringByAppendingFormat:@"(%d)", (int)sequenceNumber+1];
}
return [[nakedName stringByAppendingFormat:@"(%d)", (int)sequenceNumber+1] stringByAppendingPathExtension:extension];
}
- (NSString *)pathByDeletingSequenceNumber
{
NSString *baseName = [self stringByDeletingPathExtension];
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\([0-9]+\\)$" options:0 error:NULL];
__block NSRange range = NSMakeRange(NSNotFound, 0);
[regex enumerateMatchesInString:baseName options:0 range:NSMakeRange(0, [baseName length]) usingBlock:^(NSTextCheckingResult *match, NSMatchingFlags flags, BOOL *stop) {
range = [match range];
*stop = YES;
}];
if (range.location != NSNotFound)
{
return [self stringByReplacingCharactersInRange:range withString:@""];
}
return self;
}
@end