核心数据保存触发了关于UICalloutBarOverlay的非相关异常?

时间:2010-08-05 04:41:54

标签: cocoa-touch core-data

2010-08-05 00:34:49.186 Holidays[30485:207] -[UICalloutBarOverlay controllerWillChangeContent:]: unrecognized selector sent to instance 0x5b53540
2010-08-05 00:34:49.188 Holidays[30485:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UICalloutBarOverlay controllerWillChangeContent:]: unrecognized selector sent to instance 0x5b53540'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x02587919 __exceptionPreprocess + 185
    1   libobjc.A.dylib                     0x026d55de objc_exception_throw + 47
    2   CoreFoundation                      0x0258942b -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
    3   CoreFoundation                      0x024f9116 ___forwarding___ + 966
    4   CoreFoundation                      0x024f8cd2 _CF_forwarding_prep_0 + 50
    5   CoreData                            0x0012e1fb -[NSFetchedResultsController(PrivateMethods) _managedObjectContextDidChange:] + 1867
    6   Foundation                          0x00215c1d _nsnote_callback + 145
    7   CoreFoundation                      0x0255fcf9 __CFXNotificationPost_old + 745
    8   CoreFoundation                      0x024df11a _CFXNotificationPostNotification + 186
    9   Foundation                          0x0020b7c2 -[NSNotificationCenter postNotificationName:object:userInfo:] + 134
    10  CoreData                            0x0006a519 -[NSManagedObjectContext(_NSInternalNotificationHandling) _postObjectsDidChangeNotificationWithUserInfo:] + 89
    11  CoreData                            0x000d9b33 -[NSManagedObjectContext(_NSInternalChangeProcessing) _createAndPostChangeNotification:withDeletions:withUpdates:withRefreshes:] + 259
    12  CoreData                            0x0004cf78 -[NSManagedObjectContext(_NSInternalChangeProcessing) _processRecentChanges:] + 1352
    13  CoreData                            0x00086a15 -[NSManagedObjectContext save:] + 149
    14  Holidays                            0x0000977b -[UIEventDetailController save:] + 752
    15  UIKit                               0x004abe14 -[UIApplication sendAction:to:from:forEvent:] + 119
    16  UIKit                               0x006b314b -[UIBarButtonItem(UIInternal) _sendAction:withEvent:] + 156
    17  UIKit                               0x004abe14 -[UIApplication sendAction:to:from:forEvent:] + 119
    18  UIKit                               0x005356c8 -[UIControl sendAction:to:forEvent:] + 67
    19  UIKit                               0x00537b4a -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 527
    20  UIKit                               0x005366f7 -[UIControl touchesEnded:withEvent:] + 458
    21  UIKit                               0x004cf2ff -[UIWindow _sendTouchesForEvent:] + 567
    22  UIKit                               0x004b11ec -[UIApplication sendEvent:] + 447
    23  UIKit                               0x004b5ac4 _UIApplicationHandleEvent + 7495
    24  GraphicsServices                    0x02dedafa PurpleEventCallback + 1578
    25  CoreFoundation                      0x02568dc4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
    26  CoreFoundation                      0x024c9737 __CFRunLoopDoSource1 + 215
    27  CoreFoundation                      0x024c69c3 __CFRunLoopRun + 979
    28  CoreFoundation                      0x024c6280 CFRunLoopRunSpecific + 208
    29  CoreFoundation                      0x024c61a1 CFRunLoopRunInMode + 97
    30  GraphicsServices                    0x02dec2c8 GSEventRunModal + 217
    31  GraphicsServices                    0x02dec38d GSEventRun + 115
    32  UIKit                               0x004b9b58 UIApplicationMain + 1160
    33  Holidays                            0x000021ba main + 84
    34  Holidays                            0x0000215d start + 53
)
terminate called after throwing an instance of 'NSException'

我所做的只是保存一个物体。任何的想法?我根本没有使用UICalloutBarOverlay。似乎会触发一些随机函数,这只是一种情况。

以下是我在这个特殊情况下看到的一些可能的例外情况:

-[__NSCFDictionary controllerWillChangeContent:]: unrecognized selector sent to instance 0x5b3e1e0
-[UIImageView controllerWillChangeContent:]: unrecognized selector sent to instance  0x5e3ab10
-[CALayer controllerWillChangeContent:]: unrecognized selector sent to instance 0x5b377d0

(gdb)继续

在这个帖子NSFetchedResultsController based Table View always fails on SECOND insert of entity中,错误正是我在这里看到的。

2 个答案:

答案 0 :(得分:1)

这是线索:

-[NSNotificationCenter postNotificationName:object:userInfo:]

这意味着发布通知并且该通知的一个接收者已经消失;最有可能被释放。对于代码中的每次-addObserver:调用,您需要将其与-removeObserver:匹配。 NSNotificationCenter不会保留与之关联的观察者,但会对其保持强烈的参考。

答案 1 :(得分:0)

这不是一个答案,但也许是像我这样的人的解决方案,他们面对这个问题并且在解决方案上花了好几个小时。我的情况与海报非常相似,在使用-[CALayer controllerWillChangeContent:]: unrecognized selector sent to instance更改详细视图中的属性时崩溃了。

Sza的评论指出了我正确的方向。我使用了Red Artisan here中的代码,但将appDelegate中的init方法从initWithStyle更改为initWithNibName,然后再次在控制器的类文件中执行initWithNibName(D'哦!)。

同样,不是一个具体的答案,但希望能帮助某人下线。