необученное исключение со словарем и label.text - PullRequest
0 голосов
/ 09 января 2012

Я пытаюсь найти в словаре (переданном через наблюдателя):

NSDictionary *myDictionnary = [NSDictionary dictionaryWithObjectsAndKeys:@"details",@"details de l'installation",@"recapitulatif",@"recapitulatif de l'installe",nil];

... чтобы установить текст в метке:

NSLog(@"key: %@, value: %@", recapitulatif, [dictionnary objectForKey:@"recapitulatif"]);
details.text = [dictionnary objectForKey:@"recapitulatif"];

Но это делает меня непостижимым исключением:

-[ThirdViewController objectForKey:]: unrecognized selector sent to instance 0x4b59c30
2012-01-09 15:07:13.179 emars[8185:b303] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[ThirdViewController objectForKey:]: unrecognized selector sent to instance 0x4b59c30'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x00fb45a9 __exceptionPreprocess + 185
    1   libobjc.A.dylib                     0x01108313 objc_exception_throw + 44
    2   CoreFoundation                      0x00fb60bb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
    3   CoreFoundation                      0x00f25966 ___forwarding___ + 966
    4   CoreFoundation                      0x00f25522 _CF_forwarding_prep_0 + 50
    5   emars                               0x0000439d -[FirstViewController updateLabel:] + 134
    6   Foundation                          0x0002f669 _nsnote_callback + 145
    7   CoreFoundation                      0x00f8c9f9 __CFXNotificationPost_old + 745
    8   CoreFoundation                      0x00f0b93a _CFXNotificationPostNotification + 186
    9   Foundation                          0x0002520e -[NSNotificationCenter postNotificationName:object:userInfo:] + 134
    10  emars                               0x0000880b -[ThirdViewController connectionDidFinishLoading:] + 541

Спасибо за помощь, я не понимаю свою ошибку

EDIT:

Вот весь метод:

- (void)updateLabel:(NSNotification*)notification
{
    NSDictionary *dictionnary = (NSDictionary*)[notification object];   
    NSLog(@"key: %@, value: %@", recapitulatif, [dictionnary objectForKey:@"recapitulatif"]);
}

И Обозреватель отправляется из класса "ThirdViewController":

NSDictionary *myDictionnary = [NSDictionary dictionaryWithObjectsAndKeys:@"details",@"details de l'installation",@"recapitulatif",@"recapitulatif de l'installe",nil];
[[NSNotificationCenter defaultCenter] postNotificationName:@"LABELUPDATENOTIFICATION" object:self userInfo:myDictionnary];

Еще раз спасибо !!!

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

- (void)updateLabel:(NSNotification*)notification
{
    NSDictionary *dictionnary = (NSDictionary*)[notification userInfo];
    NSLog(@"key: %@, value: %@", recapitulatif, [dictionnary objectForKey:@"recapitulatif"]);   
    NSLog(@"text: ", [dictionnary objectForKey:@"recapitulatif"]);
}

Дай мне

key: <UILabel: 0x4b2ff80; frame = (20 245; 280 133); text = 'Index du Compteur: 1 572,...'; clipsToBounds = YES; opaque = NO; autoresize = RM+BM; userInteractionEnabled = NO; layer = <CALayer: 0x4b30040>>, value: (null)

и

text: 

Это должно дать мне @ "recapitulatif de l'installe", не так ли?

1 Ответ

0 голосов
/ 09 января 2012

Из-за ошибки, которую вы опубликовали (но не увидели больше вашего кода, который вы должны также опубликовать там), получается, что вы пытаетесь сделать метод objectForKey для вашего ThirdViewController объекта(это контроллер представления), а не фактический NSDictionary, от которого вы хотели получить ваш объект.

Убедитесь, что dictionnary установлен правильно, когда вы вызываете objectForKey для него.

Сделайте это:

NSDictionary *dictionnary = (NSDictionary*)[notification userInfo];  

вместо этого:

NSDictionary *dictionnary = (NSDictionary*)[notification object];   

Я связал документацию Apple NSDictionary userInfo для вас.

...