Проблема с извлечением словарных объектов в массив из plist iphone sdk - PullRequest
0 голосов
/ 12 мая 2010

Какой тип данных вы используете для извлечения элементов, тип которых словарь в plist, то есть nsmutabledictionary или nsdictionary? Потому что я использую следующий код для извлечения объектов словаря из массива словарей в plist.

NSMutableDictionary *_myDict = [contentArray objectAtIndex:0]; //APP CRASHES HERE

NSLog(@"MYDICT : %@",_myDict);
NSString *myKey = (NSString *)[_myDict valueForKey:@"Contents"] ; 

[[cell lblFeed] setText:[NSString stringWithFormat:@"%@",myKey]];

Здесь, в первой строке, он показывает мне objc_msgsend. ContentArray - это nsarray, и его содержимое показывает 2 объекта, которые есть в plist. В plist они являются объектами словаря. Тогда почему эта ошибка?

РЕДАКТИРОВАТЬ:

По сути, содержимое моего contentArray в консоли выглядит так:

CONTENT ARRAY :  
(
    {
    favourites = 0;
    id = 0;
    story = "This is my first record";
    timestamp = 324567;
},
    {
    favourites = 0;
    id = 1;
    story = "This is my second record";
    timestamp = 321456;
}
)

Я хочу получить эти объекты словаря из массива контента.

Кто-нибудь может помочь, пожалуйста?

Это действительно срочно.

Спасибо заранее.

1 Ответ

2 голосов
/ 12 мая 2010

NSDictionary. Вы не можете просто сказать

NSMutableDictionary *_myDict = [contentArray objectAtIndex:0]; 

и надеюсь, что это изменчивый словарь. Это все еще нормальное неизменное поведение. Итак, вы должны написать что-то вроде:

NSMutableDictionary *_myDict = [NSMutableDictionary dictionaryWithDictionary:[contentArray objectAtIndex:0]];

Это создаст изменяемый словарь из того, что находится в списке.

Вы можете прочитать об этом в «Руководстве по программированию списка свойств», http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Conceptual/PropertyLists/index.html

Обновление:

Также у вас есть странное содержание plist. Доступные типы xml-plist упомянуты здесь: http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Conceptual/PropertyLists/AboutPropertyLists/AboutPropertyLists.html#//apple_ref/doc/uid/10000048i-CH3-SW1

И общая структура xml-plist описана здесь: http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Conceptual/PropertyLists/UnderstandXMLPlist/UnderstandXMLPlist.html#//apple_ref/doc/uid/10000048i-CH6-SW1

Рабочая часть кода

void test() {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    NSMutableArray *arrayIWillWrite = [NSMutableArray array];
    NSMutableDictionary *dictionary;

    dictionary = [NSMutableDictionary dictionary];
    [dictionary setObject:[NSNumber numberWithInt:0] forKey:@"favourites"];
    [dictionary setObject:[NSNumber numberWithInt:0] forKey:@"id"];
    [dictionary setObject:@"This is my first record" forKey:@"story"];
    [dictionary setObject:[NSNumber numberWithInt:324567] forKey:@"timestamp"];
    [arrayIWillWrite addObject:dictionary];

    dictionary = [NSMutableDictionary dictionary];
    [dictionary setObject:[NSNumber numberWithInt:0] forKey:@"favourites"];
    [dictionary setObject:[NSNumber numberWithInt:1] forKey:@"id"];
    [dictionary setObject:@"This is my second record" forKey:@"story"];
    [dictionary setObject:[NSNumber numberWithInt:321456] forKey:@"timestamp"];
    [arrayIWillWrite addObject:dictionary];

    [arrayIWillWrite writeToFile:@"/Users/alex/test.plist" atomically:NO];

    NSArray *arrayThatWasRead = [NSArray arrayWithContentsOfFile:@"/Users/alex/test.plist"];
    NSLog(@"%@", arrayThatWasRead);

    NSDictionary *dictionaryFromArrayThatWasRead = [arrayThatWasRead objectAtIndex:0];
    NSLog(@"%@", dictionaryFromArrayThatWasRead);

    [pool release];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...