2013-02-12 4 views
0

У меня есть NSMutableDictionary под названием «myScheduleFullDictionary» настроить так:NSMutableDictionary + NSMutableArray аварии

KEY    VALUE 
"Day 1"   An NSMutableArray of NSMutableDictionaries 
"Day 2"   An NSMutableArray of NSMutableDictionaries 
"Day 3"   An NSMutableArray of NSMutableDictionaries 

т.д.

Я пытаюсь разобрать его - в основном захватить один из MutableArrays, содержащихся как Значение одного из ключей. Вот мой код:

// First I make a mutableCopy of the entire Dictionary: 
NSMutableDictionary *copyOfMyScheduleDictionary = [myScheduleFullDictionary mutableCopy]; 

// Next I grab & sort all the KEYS from it: 
NSArray *dayKeysArray = [[copyOfMyScheduleDictionary allKeys] sortedArrayUsingSelector:@selector(compare:)]; 

// I set up an NSMutableArray to hold the MutableArray I want to grab: 
NSMutableArray *sessionsInThatDayArray = [[NSMutableArray alloc] init]; 

// Then I iterate through the KEYs and compare each to the one I'm searching for: 
for (int i = 0; i < [dayKeysArray count]; i++) { 

    NSString *currentDayKey = [dayKeysArray objectAtIndex:i];   
    if ([currentDayKey isEqualToString: targetDayString]) { 
     NSLog(@"FOUND MATCH!!!"); 

     // I log out the NSMutableArray I found - which works perfectly: 
     NSLog(@"found array is: %@", [copyOfMyScheduleDictionary objectForKey:currentDayKey]); 

     // But when I try to actually grab it, everything crashes: 
     sessionsInThatDayArray = [copyOfMyScheduleDictionary objectForKey:currentDayKey]; 
     break; 
    } 
} 

Ошибки я получаю:

-[__NSDictionaryM name]: unrecognized selector sent to instance 0x1c5fb2d0 

Не уверен, почему его указав «имя» как «непризнанного селектора.» «name» - это свойство NSString класса «Session», о котором я заявлял, и я работаю с ним: может ли связать связь?

Любые идеи?

EDIT:

Вот мой «SessionObject» определение класса:

@interface SessionObject : NSObject 


@property (nonatomic, strong) NSString *name; 
@property (nonatomic, strong) NSString *speaker; 
@property (nonatomic, strong) NSString *location; 
@property (nonatomic, strong) NSDate *startTime, *endTime; 
@property (nonatomic, strong) NSString *notes; 
@property (nonatomic, strong) NSString *dayOfConference; 


@end 
+0

Где используется 'name'? – yeesterbunny

+0

см. Обновленный вопрос – sirab333

+2

Вы уверены, что это строка, вызывающая ошибку? Добавили ли вы контрольную точку исключения? Не имеет смысла, что журнал должен работать, но не следующая строка. – rdelmar

ответ

1
-[__NSDictionaryM name]: unrecognized selector sent to instance 0x1c5fb2d0 

Это означает, что вы пытаетесь вызвать name на NSMutableDictionary, где, как вы должны назвали его на объект класса SessionObject. Проверьте линию, где вы звоните, например, myObject.name или [myObject name] и посмотрите, есть ли myObject тип SessionObject, а не NSMutableDictionary.

Здесь __NSDictionaryM обозначает тип NSMutableDictionary.

0

Я не уверен, откуда исходит ваша ошибка - но что вы там делаете? Почему бы вам просто не написать

sessionsInThatDayArray = [myScheduleFullDictionary objectForKey:targetDayString]; 

??? Это то, что NSDictionary существует для вас - вы не ищете вещи вручную, вы просто вызываете метод для поиска ключа. Вместо этого вы скопировали словарь, вы извлекли все ключи, вы отсортировали ключи, вы повторяли их один за другим, пока не нашли его, - а затем вы вызвали objectForKey !!!

Кроме того, в отладчике устанавливается точка останова во всех исключениях Objective-C. Он прекратится, когда будет вызван код нарушения, поэтому нет необходимости искать иглу в стоге сена.

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