2012-08-09 100 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];