2

iPad アプリで NSApplicationSupportDirectory に保存するときに奇妙な問題が発生しています。

私はこのデータ構造を長い間問題なく使用してきましたが、プログラムの最初の 2 回のロード中にのみ表示されます。

アプリを初めて開いたときに、mainBundle からファイルを開き、既定の設定ファイルとして再保存します。このファイルは、アプリケーションの設定に対する変更を保存するために使用されます。

アプリを 2 回目に開いたときに、ファイルがまだ存在していないように見えるため、再度作成されます。3回目以降は順調です。初めて保存しない理由がわかりません。

乱雑で申し訳ありません - これは何百ページものコードの一部です!

これが私の初期化です:

///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");

}
4

1 に答える 1

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]; 
于 2012-08-09T20:29:51.187 に答える