Завершение приложения — ‘NSInvalidArgumentException’, причина: ‘- [nscfstring objectForKey:]: нераспознанный селектор, отправленный экземпляру

У меня есть следующий код в моем приложении iOS, которое кто-то создал. тем не менее, этот раздел Приложения ломает и аварийно завершает работу.

   if([[dictHomeSettings allKeys] containsObject:@"notify_url"]) {
        NSString *notifyUrl = [dictHomeSettings objectForKey:@"notify_url"];
        if(notifyUrl.length>0) {
            dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
            dispatch_async(queue, ^(void) {
//                    //  You may want to cache this explicitly instead of reloading every time.
//                    NSData *notifyData = [NSData dataWithContentsOfURL:[NSURL URLWithString:notifyUrl]];
//                    NSError* error;
//                    NSDictionary* json = [NSJSONSerialization JSONObjectWithData:notifyData
//                                                                         options:kNilOptions
//                                                                           error:&error];

                XMLDictionaryParser *xmlParser = [XMLDictionaryParser new];
                NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:[NSURL URLWithString:notifyUrl]];
                NSDictionary *aDict = [xmlParser dictionaryWithParser:parser];

                dispatch_async(dispatch_get_main_queue(), ^{
                    //NSLog(@"myNsArray : %@",aDict);
                    if([[aDict allKeys] containsObject:@"Notification"]) {
                        NSArray *array = [aDict objectForKey:@"Notification"];
                        if(array.count>0) {
                            [Common deletePreviousLocalNotifications];
                            for(NSDictionary *dictNotification in array) {
                                NSDateFormatter *dateFormatter = [NSDateFormatter new];
                                [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

                                if([Common compareDate:[dictNotification objectForKey:@"StartTime"] isGreaterThanOrEqualDate:[dateFormatter stringFromDate:[NSDate date]]]) {
                                    NSLog(@"adding notification : %@",dictNotification);
                                    [Common addLocalNotificationAtDateTime:[dateFormatter dateFromString:[dictNotification objectForKey:@"StartTime"]] AlertBody:[dictNotification objectForKey:@"Message"] UserInfo:[NSDictionary dictionaryWithObjectsAndKeys:[dictNotification objectForKey:@"URL"], @"URL", nil]];
                                }
                            }
                        }
                    }
                });
            });

2 ответа

  1. Вы пытаетесь вызвать «objectForKey» на объекте NSString. Проверьте, действительно ли объекты, которые вы считаете объектами NSDictionary, являются экземплярами объектов NSDictionary.

  2. Очевидно, вы пытаетесь вызвать objectForKey на NSStringобъект. Как замечено[dictNotification objectForKey:@"StartTime"], это Numberзначение, но вы предполагаете, что это строка (я не уверен в этом). Таким образом, вы получаете errorна этот вызов

    [Common compareDate:(Number *) isGreaterThanOrEqualDate:(NSString *)];
    

    Вы можете установить a Symbolic breakpointс этим символом на-[NSObject doesNotRecognizeSelector:]легко debugкод.