2013-05-28 4 views
0

Я создаю слой словарей. PLIST начинается как пустой, а затем я делаю это:Создание массива словарей plist

NSMutableArray *favouritesList = [[NSMutableArray alloc] initWithContentsOfFile:path]; 
[favouritesList addObject:thisPlace]; // where thisPlace is some NSDictionary 
[favouritesList writeToFile:path atomically:YES]; 

Когда я немедленно сделать:

NSArray *savedFav = [[NSArray alloc] initWithContentsOfFile:path]; 
NSLog(@"%@", savedFav); 

я получаю пустой массив. Почему это? Почему он не пишет правильно? Я правильно настраиваю plist, я отлаживал это. Но я не могу добавить к нему словарь.

PLIST просто пустой PLIST с корнем, что это такое массив

EDIT:

Вот как я построить свой путь:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"favourites.plist"]; 
NSFileManager *fileManager = [NSFileManager defaultManager]; 

if (![fileManager fileExistsAtPath:path]) { 
    NSString *sourcePath = [[NSBundle mainBundle] pathForResource:@"favourites" ofType:@"plist"]; 
    [fileManager copyItemAtPath:sourcePath toPath:path error:nil]; 
} 
+0

Вы вошли в систему 'path', чтобы убедиться, что это действительно? Указывает ли он на файл в каталоге «Документы»? Как вы построили «путь»? Вы проверили, вернул ли 'writeToFile'' TRUE'? – Rob

+0

Да, см. Редактирование того, как я сделал свой путь – darksky

+1

Если файл plist пуст, то первая инициализация завершается с ошибкой и возвращает 'nil'. Вы должны проверить это и выделить-инициализировать действительный, но пустой массив. –

ответ

0

я сделать что-то, как показано ниже. Я добавляю объект с помощью ключа. Возможно, поэтому он не работает.

статический NSMutableDictionary * dictionaryStore;

+(void)initialize{ 
    if(dictionaryStore == nil){ 
     dictionaryStore = [[NSMutableDictionary alloc] initWithContentsOfFile:[self getFilePath]]; 
     if(dictionaryStore == nil) 
      dictionaryStore = [NSMutableDictionary new]; 
    } 
} 

+(NSString *)getFilePath{ 
    NSString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    NSString *plistPath = [rootPath stringByAppendingPathComponent:@"filename.plist"]; 
    return plistPath; 
} 

+(NSString *)getValueForKey:(NSString *)key{ 
    [self initialize]; 

    return [dictionaryStore objectForKey:key]; 
} 

+(void)setValue:(NSString *)value forKey:(NSString *)key{ 
    [self initialize]; 

    [dictionaryStore setValue:value forKey:key]; 
} 

+(BOOL)save{ 
    [self initialize]; 

    return [dictionaryStore writeToFile:[self getFilePath] atomically:YES]; 
} 

Edit: Так, чтобы сохранить значение, я делаю:

[WAStore setValue:myValue forKey:myKey]; 
BOOL isSuccessful = [WAStore save]; 

WAStore это имя класса. myValue может быть большинством типов данных (NSManagedObjectModels не будет работать). myKey - это любой NSString.

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