2011-12-14 2 views
1

У меня есть Plist файл, который содержит массив словарей, и я пытаюсь показать в консоли присутствуют элементы dictionnaries ... вот мой код:показывающие элементы словаря

NSString *path = [[NSBundle mainBundle] pathForResource:@"validrep" ofType:@"plist"]; 
descArray = [[NSMutableArray alloc] init]; 

NSString *key = [NSString stringWithFormat:@"test %i",i+1]; 

NSMutableArray *tabreponses = [[NSMutableArray arrayWithContentsOfFile:path] retain]; 

NSDictionary *dictreponses = [NSDictionary dictionaryWithObject:[tabreponses objectAtIndex:i] forKey:key]; 

[descArray addObject:dictreponses]; 

NSDictionary *dictionary = [descArray objectAtIndex:i]; 
NSArray *array = [dictionary objectForKey:key]; 


NSLog(@"the array is %@, it contains %i elements.",array,[array count]); 

До сих пор everythig работает правильно, и это то, что консоль показывает:

2011-12-14 14:52:33.845 Daltonien[1459:b603] the array is { 
    rep1 = "1 \U00e9toile derri\U00e8re un quadrillage "; 
    rep2 = "1 lettre B derri\U00e8re un quadrillage"; 
    rep3 = "1 quadrillage seul "; 
}, it contains 3 elements. 

, но она не работает, когда я пытаюсь показать первый элемент массива, я делаю это так:

NSLog(@"the array is %@, it contains %i elements, the first element is %@ .",array,[array count],[array objectAtIndex:i]); 


Это приводит к исключению:

Daltonien[1478:b603] -[__NSCFDictionary objectAtIndex:]: 
    unrecognized selector sent to instance 0x4b8cbd0 
Daltonien[1478:b603] *** Terminating app due to 
    uncaught exception 'NSInvalidArgumentException', 
     reason: '-[__NSCFDictionary objectAtIndex:]: 
     unrecognized selector sent to instance 0x4b8cbd0' 
*** Call stack at first throw: 
(
    0 CoreFoundation      0x00dca5a9 __exceptionPreprocess + 185 
    1 libobjc.A.dylib      0x00f1e313 objc_exception_throw + 44 
    2 CoreFoundation      0x00dcc0bb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187 
    3 CoreFoundation      0x00d3b966 ___forwarding___ + 966 
    4 CoreFoundation      0x00d3b522 _CF_forwarding_prep_0 + 50 
    5 Daltonien       0x00002cff -[DetailViewController tableView:numberOfRowsInSection:] + 193 
    6 UIKit        0x004772b7 -[UISectionRowData refreshWithSection:tableView:tableViewRowData:] + 1834 
    7 UIKit        0x00474d88 -[UITableViewRowData numberOfRows] + 108 
    8 UIKit        0x00328677 -[UITableView noteNumberOfRowsChanged] + 132 
    9 UIKit        0x00335708 -[UITableView reloadData] + 773 
    10 UIKit        0x00332844 -[UITableView layoutSubviews] + 42 
    11 QuartzCore       0x01d6aa5a -[CALayer layoutSublayers] + 181 
    12 QuartzCore       0x01d6cddc CALayerLayoutIfNeeded + 220 
    13 QuartzCore       0x01d120b4 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 310 
    14 QuartzCore       0x01d13294 _ZN2CA11Transaction6commitEv + 292 
    15 QuartzCore       0x01d1346d _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 99 
    16 CoreFoundation      0x00dab89b __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 27 
    17 CoreFoundation      0x00d406e7 __CFRunLoopDoObservers + 295 
    18 CoreFoundation      0x00d091d7 __CFRunLoopRun + 1575 
    19 CoreFoundation      0x00d08840 CFRunLoopRunSpecific + 208 
    20 CoreFoundation      0x00d08761 CFRunLoopRunInMode + 97 
    21 GraphicsServices     0x017211c4 GSEventRunModal + 217 
    22 GraphicsServices     0x01721289 GSEventRun + 115 
    23 UIKit        0x002c8c93 UIApplicationMain + 1160 
    24 Daltonien       0x000020c8 main + 102 
    25 Daltonien       0x00002059 start + 53 
    26 ???         0x00000001 0x0 + 1 
) 
terminate called throwing an exception 

с тем, что я должен изменить objectAtIndex:i

Спасибо за помощь мне.

+1

Когда вы говорите «это не работает», что он делает? –

+0

Если вы хотите увидеть первый элемент, почему вы передаете 'i' вместо' 0' в качестве индекса? – DarkDust

+0

Когда это не работает, консоль показывает исключение: исключение «NSInvalidArgumentException», причина: '- [__ NSCFDictionary objectAtIndex:]: нераспознанный селектор, отправленный экземпляру 0x4b8cbd0' –

ответ

0

Если вы хотите, первый объект в массиве, вы хотите что-то вроде этого:

[array objectAtIndex:0]; 

Переберите все объекты, это будет сделать это:

for (id someObject in array) { 
    // Do stuff 
} 
+0

та же проблема с 0 –

+0

@ user1027411: ** Что ** проблема ? Вы все еще не сказали нам. – DarkDust

+0

exception 'NSInvalidArgumentException', reason: '- [__ NSCFDictionary objectAtIndex:]: непризнанный селектор, отправленный экземпляру 0x4b8cbd0' –

4

проблема заключается в следующем:

Ваш ключ, @ "test1", на самом деле является словарем, а не массивом ... Чтобы получить первый ключ/значение словаря, вы должны сделать следующее

[[myDictionary keys] objectAtIndex:0] 
[[myDictionary values] objectAtIndex:0] 
+0

Хе-хе ... хороший улов. Я пропустил очевидное здесь: D –

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