исключение «нераспознанный селектор отправлен в экземпляр ***» при сохранении контекста coredata - PullRequest
1 голос
/ 03 июля 2011

Я получаю это исключение при попытке сохранить мой контекст:

нераспознанный селектор отправлен в экземпляр 0x5937b60

У меня есть аналогичный код для другого UITableViewController, он работает нормально,Я сравнил оба, чтобы убедиться, что я делаю вещи одинаково, и на первый взгляд они выглядят почти одинаково.Странно, что после выдачи исключения мое приложение сохраняет контекст.При повторном запуске я вижу изменения, внесенные в мою модель.

Я построил весь свой интерфейс с кодом (без IB).

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

Стек выглядит так:

0   CoreFoundation                      0x00fbd5a9 __exceptionPreprocess + 185
1   libobjc.A.dylib                     0x01111313 objc_exception_throw + 44
2   CoreFoundation                      0x00fbf0bb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
3   CoreFoundation                      0x00f2e966 ___forwarding___ + 966
4   CoreFoundation                      0x00f2e522 _CF_forwarding_prep_0 + 50
5   Foundation                          0x007aa669 _nsnote_callback + 145
6   CoreFoundation                      0x00f959f9 __CFXNotificationPost_old + 745
7   CoreFoundation                      0x00f1493a _CFXNotificationPostNotification + 186
8   Foundation                          0x007a020e -[NSNotificationCenter postNotificationName:object:userInfo:] + 134
9   CoreData                            0x00d295b9 -[NSManagedObjectContext(_NSInternalAdditions) _didSaveChanges] + 1513
10  CoreData                            0x00d2388a -[NSManagedObjectContext save:] + 522
11  TimeManager                         0x0000fe9d -[WorkTimeRootViewController viewController:didFinishWithSave:] + 253
12  TimeManager                         0x00012b73 -[AddWorkTimeViewController save:] + 83
13  UIKit                               0x000384fd -[UIApplication sendAction:to:from:forEvent:] + 119
14  UIKit                               0x0024acc3 -[UIBarButtonItem(UIInternal) _sendAction:withEvent:] + 156
15  UIKit                               0x000384fd -[UIApplication sendAction:to:from:forEvent:] + 119
16  UIKit                               0x000c8799 -[UIControl sendAction:to:forEvent:] + 67
17  UIKit                               0x000cac2b -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 527
18  UIKit                               0x000c97d8 -[UIControl touchesEnded:withEvent:] + 458
19  UIKit                               0x0005cded -[UIWindow _sendTouchesForEvent:] + 567
20  UIKit                               0x0003dc37 -[UIApplication sendEvent:] + 447
21  UIKit                               0x00042f2e _UIApplicationHandleEvent + 7576
22  GraphicsServices                    0x011f6992 PurpleEventCallback + 1550
23  CoreFoundation                      0x00f9e944 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
24  CoreFoundation                      0x00efecf7 __CFRunLoopDoSource1 + 215
25  CoreFoundation                      0x00efbf83 __CFRunLoopRun + 979
26  CoreFoundation                      0x00efb840 CFRunLoopRunSpecific + 208
27  CoreFoundation                      0x00efb761 CFRunLoopRunInMode + 97
28  GraphicsServices                    0x011f51c4 GSEventRunModal + 217
29  GraphicsServices                    0x011f5289 GSEventRun + 115
30  UIKit                               0x00046c93 UIApplicationMain + 1160
31  TimeManager                         0x00001c79 main + 121
32  TimeManager                         0x00001bf5 start + 53

Это метод, в котором происходит сбой приложения:

- (void)viewController:(id)controller didFinishWithSave:(BOOL)save
{
    if (save) 
    {
        NSNotificationCenter *dnc = [NSNotificationCenter defaultCenter];
        [dnc addObserver:self selector:@selector(addControllerDidSave:) name:NSManagedObjectContextDidSaveNotification object:self.addingManagedObjectContext];

        NSError *error;
        if (![self.addingManagedObjectContext save:&error]) // it crashes here!
        {
            NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
            exit(-1);  // Fail
        }

        [dnc removeObserver:self name:NSManagedObjectContextDidSaveNotification object:self.addingManagedObjectContext];
    }

    self.addingManagedObjectContext = nil;

    [self dismissModalViewControllerAnimated:YES];
}

Я неЯ не знаю, какой еще код я должен прикрепить, так как я не уверен, что является причиной проблемы.Любая помощь будет ДЕЙСТВИТЕЛЬНО оценена !!!

1 Ответ

2 голосов
/ 03 июля 2011

Тройная проверка орфографии / падежа ваших селекторов.Выглядит так, как будто вы, возможно, добавляете наблюдателя для метода, который на самом деле не существует, и поскольку XCode не может проверять селекторы для вас, часто есть глупая опечатка, которая вызывает подобные сбои.

Также - тройная проверка, что если метод ожидает объект, в конце селектора есть: и в равной степени, если метод не ожидает объект, убедитесь, что его нет.Значение:.

Отметьте все, кроме кода, который вы указали здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...