NSDictionary из файла plist

Вот моя проблема.

Я не могу преобразовать свои данные plist (сериализованные в JSON) в NSDictionary.

Чтобы сохранить данные в моем приложении, я пишу файл plist таким образом.

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
    [dict setObject:[NSNumber numberWithInt:[[MyUser sharedUser] userID]] forKey:@"userID"];
    [dict setObject:[[MyUser sharedUser] firstname] forKey:@"firstname"];
    [dict setObject:[[MyUser sharedUser] lastname] forKey:@"lastname"];
    [dict setObject:[[MyUser sharedUser] mail] forKey:@"mail"];
    [dict setObject:[[MyUser sharedUser] pwd] forKey:@"pwd"];
    [dict setObject:[[MyUser sharedUser] token] forKey:@"token"];
    [dict setObject:[[MyUser sharedUser] picture] forKey:@"picture"];

    NSData *putData = [NSJSONSerialization dataWithJSONObject:dict options:0 error:nil];
    NSArray *array = [[NSArray alloc] initWithObjects:putData, nil];
    [array writeToFile:[self getSaveFilePath] atomically:YES];
}

Когда я хочу загрузить данные из plist, чтобы получить файл NSDictionary.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    NSString *myPath = [self getSaveFilePath];
    BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:myPath];
    if (fileExists)
    {
        NSData *data = [NSData dataWithContentsOfFile:myPath];
        NSLog(@"%@", data);
        NSString *s = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", s);
    }
    return YES;
}

s равно: (так же, как содержимое моего файла, когда я открываю его во Fraise)

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
    <data>
    eyJsYXN0bmFtZSI6IkRvbm5pbmdlciIsImR0ZWxscyI6IlRPT00iLCJpc0RDYXJkUHJv
    RGVmYXVsdCI6ImluZGl2aWR1YWwiLCJzZW5kaW5nSW52aXQiOiJzbXMiLCJpc0F1dG9E
    bCI6IjAiLCJmaXJzdG5hbWUiOiJUaG9tYXMiLCJjb250YWN0TGlzdCI6eyJtZXNzYWdl
    IjoiUmVjb3JkKHMpIEZvdW5kIiwic3VjY2VzcyI6dHJ1ZSwiZGF0YSI6eyJ0b3RhbENv
    dW50IjozLC [....]
</data>
</array>
</plist>

Я не знаю, что делать с моей строкой, чтобы преобразовать ее в NSDictionary. Как я могу получить NSDictionary из plist?


person Tom-pouce    schedule 14.11.2013    source источник
comment
Я этого не говорил, или я не это имел в виду. Данные, хранящиеся в plist, находятся в формате JSON. В любом случае SPA найдет решение.   -  person Tom-pouce    schedule 14.11.2013


Ответы (2)


поскольку вы помещаете NSData в NSArray и используете это для writeToFile, вам нужно сначала вернуть его как NSArray, а затем получить объект NSData из этого массива

 NSArray *array = [NSArray arrayWithContentsOfFile:myPath];

 NSData *data = array[0];
person SPA    schedule 14.11.2013

Почему NSArray и JSON?

[dict writeToFile:[self getSaveFilePath] atomically:YES];

и

NSDictionary *restoredDictionary = [NSDictionary  dictionaryWithContentsOfFile:[self getSaveFilePath]];
person zaph    schedule 14.11.2013