我在我的iPad应用程序上保存到NSApplicationSupportDirectory有一个奇怪的问题。
我一直在使用这种数据结构很长时间没有问题,它只出现在程序的前两次加载期间。
第一次打开应用程序时,我打开mainBundle中的文件并将其重新保存为默认设置文件,然后用于存储应用程序中设置的任何更改。
我第二次打开应用程序时,该文件似乎尚未存在,因此它再次创建它!第三次及以后,一切都很顺利。我无法弄清楚为什么它没有第一次保存它。
很抱歉,如果这很麻烦 - 它是数百页代码的一部分!
这是我的初始化:
///inside the init of the object
NSFileManager* fileManager = [[NSFileManager alloc] init];
NSError* err = nil;
NSURL* dir = [fileManager URLForDirectory:NSApplicationSupportDirectory
inDomain:NSUserDomainMask
appropriateForURL:nil
create:YES
error:&err];
if (err) {
NSLog(@"error finding app support directory %@", err);
}
currentSettingsURL = [NSURL URLWithString:kCurrentSettingsFilename relativeToURL:dir];
if(![fileManager fileExistsAtPath:[currentSettingsURL path]])[self createDefaultFile];
NSArray* files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:[dir path] error:&err];
NSLog(@"files %@", files);
如果文件不存在,则创建该文件。
-(void)createDefaultFile{
NSURL* readURL = [[NSBundle mainBundle] URLForResource:@"smooth" withExtension:nil];
NSMutableData* tempData = [NSMutableData dataWithContentsOfURL:readURL];
NSKeyedUnarchiver* unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:tempData];
///re archive
[self setCurrentPresets:[unarchiver decodeObjectForKey:@"presetData"]];
}
-(void)setCurrentPresets:(NSMutableArray*)presets{
currentPresets = presets;
[self saveCurrentSettings];
}
这里是保存文件的地方
-(void)saveCurrentSettings{
data = [[NSMutableData alloc] init];
NSKeyedArchiver* archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:currentPresets forKey:kCurrentSettingsFilename];
[archiver finishEncoding];
if(![data writeToURL:currentSettingsURL atomically:YES])NSLog(@"error saving file");
}
答案 0 :(得分:1)
我只需告诉它我的NSApplicationSupportDirectory是一个文件夹..
NSURL* dir = [fileManager URLForDirectory:NSApplicationSupportDirectory
inDomain:NSUserDomainMask
appropriateForURL:nil
create:YES
error:&err];
if (err) {
NSLog(@"error finding app support directory %@", err);
}
NSURL* folder = [[NSURL alloc] initFileURLWithPath:[dir path] isDirectory:YES];
currentSettingsURL = [NSURL URLWithString:kCurrentSettingsFilename relativeToURL:folder];