0

アプリが起動すると、plist が存在するかどうかを確認し、存在しない場合は作成します。

NSFileManager *fileManager = [NSFileManager defaultManager];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"history.plist"];
    success = [fileManager fileExistsAtPath:filePath];
    if (success) {
        NSArray *arr = [[NSArray alloc] initWithContentsOfFile:[documentsDirectory stringByAppendingPathComponent:@"history.plist"]];
        for (NSDictionary *par in arr) {
            [self.history addObject:[[Paradero alloc] initWithDictionary:par]];
        }
    } else {
        [fileManager createFileAtPath:filePath contents:nil attributes:nil];
    }

ここで、ユーザーがアプリを閉じると、永続性を提供するためにデータをそのファイルに保存します

- (void)applicationDidEnterBackground:(UIApplication *)application {
    /*
     Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 
     If your application supports background execution, called instead of applicationWillTerminate: when the user quits.
     */
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"history.plist"];
    NSLog(@"%@", filePath);
    NSMutableArray *temparray = [[NSMutableArray alloc] initWithCapacity:5];
    for (Paradero *parada in self.history) {
        [temparray addObject:[parada asDictionary]];
    }
    NSLog(@"%@", temparray);
    NSLog(@"%c",[temparray writeToFile:filePath atomically:NO]);

    NSLog(@"yei");
}

オブジェクトは、ファイルに保存できるように、NSString、NSArrays を使用して Dictionary に変換されます。これが初めて発生した場合、つまり、ファイルが作成され、そこには何もありません。問題なく動作しますが、新しいデータを保存するときは失敗し、理由は示されません。

4

1 に答える 1

4

解決しました。記録のために: 最初の問題は、私が iOS5 シミュレーターでテストしていたことでした。まあ、そこを修正する方法はまだわかりません。

本当の問題は、周りに NSNull があったため、それらを空の文字列に変換する必要があったことです。

NSNull を確認することを忘れないでください。Web サービスからのものであることが判明した場合は、本当に面倒です。

于 2011-07-25T21:37:10.547 に答える