2009-12-08 3 views
0

Я пытаюсь написать массив объектов NSDictionary в файл .plist на iPhone (OS 3.0). (Они на самом деле являются объектами NSCFDictionary, когда я вызываю метод [object class]). Моя проблема в том, что она не будет записываться в файл. Если я установил массив в «nil», он, по крайней мере, создаст пустой файл plist, но не сделает этого, если у меня есть эти объекты в массиве.Проблема с writeToFile с массивом объектов NSDictionary

Мой массив является синтаксический анализ ответа от запроса JSON HTTP и выглядит следующим образом:

{ 
    "title" = "A Movie"; 
    "time_length" = "3:22"; 
}, 
{ 
    "title" = "Another Movie"; 
    "time_length" = "1:40"; 
}, 
{ 
    "title" = "A Third Movie"; 
    "time_length" = "2:10"; 
} 

код для создания файла является:

[array writeToFile:[self dataFilePath] atomically:YES]; 

- (NSString *)dataFilePath { 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
return [documentsDirectory stringByAppendingPathComponent:@"data.plist"]; 

}

Могли ли NCSFDictionary класс объектов в моем массиве мешает мне писать в файл? Спасибо за вашу помощь.

ответ

0

-writeToFile должен работать, предполагая, что КАЖДЫЙ объект, независимо от того, как «глубоко» в вашем исходном массиве, является либо NSNumber, либо NSString, NSDate, NSBoolean, NSDictionary, либо NSArray. Если там есть какой-то другой объект, он потерпит неудачу.

0

Попробуйте использовать код, приведенный ниже, чтобы получить каталог документа вместо:

NSString * documentsDirectory = [@"~/Documents/" stringByExpandingTildeInPath]; 

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

0

Другие люди имели аналогичные issues и here, является ли ваше направление изменчивым? попробуйте это code, чтобы сделать простую тестовую запись. возможно, это содержание ваших словарей.

Что касается класса NCSFDictionary, это внутренний класс, используемый каркасами. иногда вы заметите это изменение, если у вас есть огромные словари для массивов и т. д. Apple использует оптимизированный код, и иногда объект хранения на заднем конце будет меняться. но это по-прежнему ваш словарь.

0

это не должно быть:

{ 
    @"title" = @"A Movie"; 
    @"time_length" = @"3:22"; 
}, 
{ 
    @"title" = @"Another Movie"; 
    @"time_length" = @"1:40"; 
}, 
{ 
    @"title" = @"A Third Movie"; 
    @"time_length" = @"2:10"; 
} 

И не забудьте всухую прекратить его действие.

Смежные вопросы