NSDictionary не сохраняет себя в файл .plist - PullRequest
1 голос
/ 12 октября 2011

Я прочитал много вопросов и ответов, но они не решили мою проблему.

Я написал этот метод, чтобы сохранить некоторые данные из моего пера в словарь, а затем в .plist

-(void)save{

NSString *saveFilePath = [self saveFilePath];

if ([[NSFileManager defaultManager]fileExistsAtPath:saveFilePath]) {

        NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:saveFilePath];
        //I Use the "today date" for key
        NSDate *today = [[NSDate alloc]init];
        NSMutableArray *array = [[NSMutableArray alloc]init];
        NSString *delta = [[NSString alloc]initWithFormat:@"%d",[kmNew.text intValue] - [kmOld.text intValue]];

        [array addObject:delta];
        [array addObject:[consumoKg text]];
        [array addObject:[consumoEuro text]];

        [dictionary setObject:array forKey:today];

    BOOL success = [dictionary writeToFile:[self saveFilePath] atomically:YES];
    NSLog(@"%d",success);
        [today release];
        [delta release];
        [array release];
        [dictionary release];
}
else{

    NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];

    NSDate *today = [[NSDate alloc]init];
    NSMutableArray *array = [[NSMutableArray alloc]init];

    NSString *delta = [[NSString alloc]initWithFormat:@"%d",[kmNew.text intValue] - [kmOld.text intValue]];

    [array addObject:delta];
    [array addObject:[consumoKg text]];
    [array addObject:[consumoEuro text]];

    [dictionary setObject:array forKey:today];

    // Check if the value are store correctly into the dictionary

    for (NSDate *key in dictionary) {
        for (NSString *string in [dictionary objectForKey:key]) {
            NSLog(@"%@",string);
        }
    }

   BOOL success =  [dictionary writeToFile:[self saveFilePath] atomically:YES];
   NSLog(@"%d",success);

    [today release];
    [delta release];
    [array release];
    [dictionary release];
}
}

Метод saveFilePath имеет следующий вид:

- (NSString *)saveFilePath {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    return [documentsDirectory stringByAppendingPathComponent:kFilenameHistory];
}

Переменные правильно сохранены в словаре, но возвращаемое значение BOOL "success" равно 0 .. Почему?

1 Ответ

1 голос
/ 12 октября 2011

Я думаю, ключи NSDictionary должны быть строками.NSDate не допускается при сохранении в файл plist.

...