writeToFile: атомарно работает только в первый раз - PullRequest
0 голосов
/ 25 июля 2011

Когда мое приложение запускается, проверяет, существует ли 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, чтобы его можно было сохранить в файл. В первый раз, когда это случается, это означает, что файл был создан, ничего на нем, он работает просто отлично, но когда приходит время сохранять новые данные, это не удается, без объяснения причин.

1 Ответ

4 голосов
/ 26 июля 2011

решаемая.Для справки: первая проблема состояла в том, что я тестировал на iOS5 Simulator, ну, я пока не знаю, как это исправить.просто нужно было превратить их в пустые строки.

Не забудьте проверить наличие NSNulls, они действительно доставляют боль, если они выходят из веб-службы.

...