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