2012-08-09 151 views
1

我在保存到我的iPad应用程序的NSApplicationSupportDirectory时遇到了一个奇怪的问题。将问题保存到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

我只是需要告诉它我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];