2016-08-03 1 views
1

В AppDelegate.h я создал следующее свойство,AppDelegate: этот класс не является значением ключа кодирования совместимый для ключа ---

@property (strong, nonatomic) NSMutableDictionary *googleUserDetailsDictionary;

В AppDelegate.m,

static NSString *kGoogleDetails = @"googleDetails"; @synthesize googleUserDetailsDictionary;

I мы создали специальный метод в AppDelegate.m, в котором я добавил следующую строку: [self setValue:googleUserDetailsDictionary forKey:kGoogleDetails];

В ViewController, который я хотел быть наблюдателем для googleUserDetailsDictionary собственности,

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; [appDelegate addObserver:self forKeyPath:@"googleUserDetailsDictionary" options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:nil];

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 
{ 
    if ([keyPath isEqualToString:kGoogleDetails]) { 
     NSLog(@"This is change taking place: %@ \t\t", change); 

    } 
} 

Тогда я получаю следующую ошибку только тогда, когда я пытаюсь открыть ViewController: ** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<FIRA_AppDelegate-1470253453284 0x7fd4fa839410> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key googleDetails.'

ответ

1

Я считаю, что это говорит вам правду. У вас нет собственности под названием googleDetails.

Попробуйте изменить ключевой путь, чтобы соответствовать свойству, например:

static NSString *kGoogleDetails = @"googleUserDetailsDictionary"; 
+0

Это сработало! :) Но у меня есть сомнения. Я прочитал, что только подклассы NSObject внутренне подчиняются протоколу NSKeyValueCoding, тогда как для других классов мы должны его вручную установить. Но я на самом деле этого не делал для UIAppDelegate, но все-таки это сработало! Как? – Viki

+0

Также, если вам интересно ответить на это: http://stackoverflow.com/questions/38758112/understanding-the-concept-ensuring-kvc-compliance – Viki

+0

Когда вы работаете в Objective-C, большинство классов являются подклассами NSObject , (Проверьте свою декларацию класса в AppDelegate.h.) В Swift становится все более озабоченным. –

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

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