2010-07-20 136 views
3

我收到崩潰報告,崩潰線程的調用堆棧都顯示Apple的代碼。從它的外觀來看,Core Data的撤銷管理器正在訪問-[NSManagedObject(_NSInternalMethods) _newSnapshotForUndo__] + 356中的無效指針。我搜索了一下崩潰點,我發現的唯一一個類似的崩潰日誌是從Sequel Pro crash log核心數據內部方法崩潰(SIGSEGV)

這是我正在看的特定的崩潰日誌。我有什麼希望能解決這個問題嗎?怎麼樣?我無法複製這個問題。

Code Type: X86-64 (Native) 
Parent Process: launchd [184] 

Date/Time: 2010-07-16 18:23:38.505 -0800 
OS Version: Mac OS X 10.6.4 (10F569) 
Report Version: 6 

Exception Type: EXC_BAD_ACCESS (SIGSEGV) 
Exception Codes: KERN_INVALID_ADDRESS at 0x0000000000000000 
Crashed Thread: 0 Dispatch queue: com.apple.main-thread 

Application Specific Information: 
objc[27141]: garbage collection is ON 

Thread 0 Crashed: Dispatch queue: com.apple.main-thread 
0 com.apple.CoreData 0x00007fff8602a7c4 -[NSManagedObject(_NSInternalMethods) _newSnapshotForUndo__] + 356 
1 com.apple.CoreData 0x00007fff8602a3da - [NSManagedObjectContext(_NSInternalChangeProcessing) _registerUndoForOperation:withObjects:withExtraArguments:] + 218 
2 com.apple.CoreData 0x00007fff8602a2f2 -[NSManagedObjectContext(_NSInternalChangeProcessing) _registerUndoForModifiedObjects:] + 34 
3 com.apple.CoreData 0x00007fff85ff9933 -[NSManagedObjectContext(_NSInternalChangeProcessing) _processRecentChanges:] + 1155 
4 com.apple.CoreData 0x00007fff86035e72 -[NSManagedObjectContext processPendingChanges] + 18 
5 com.apple.CoreData 0x00007fff8604ca1c - [NSManagedObjectContext(_NSInternalNotificationHandling) _processEndOfEventNotification:] + 108 
6 com.apple.CoreData 0x00007fff86029c6e -[NSManagedObjectContext(_NSInternalChangeProcessing) _undoManagerCheckpoint:] + 30 
7 com.apple.Foundation 0x00007fff8460784e _nsnote_callback + 167 
8 com.apple.CoreFoundation 0x00007fff842d0a90 __CFXNotificationPost + 1008 
9 com.apple.CoreFoundation 0x00007fff842bd008 _CFXNotificationPostNotification + 200 
10 com.apple.Foundation 0x00007fff845fe7b8 -[NSNotificationCenter postNotificationName:object:userInfo:] + 101 
11 com.apple.Foundation 0x00007fff8466f557 -[NSUndoManager _postCheckpointNotification] + 74 
12 com.apple.Foundation 0x00007fff8466f3b9 -[NSUndoManager _endUndoGroupRemovingIfEmpty:] + 86 
13 com.apple.Foundation 0x00007fff8461ea71 +[NSUndoManager(NSPrivate) _endTopLevelGroupings] + 455 
14 com.apple.AppKit 0x00007fff82819945 -[NSApplication run] + 509 
15 com.apple.AppKit 0x00007fff828125f8 NSApplicationMain + 364 

在此先感謝。

+0

請注意,這來自用戶的機器,我似乎無法複製該問題。 – adib 2010-07-20 17:44:20

+0

似乎這發生(有時,並不總是)在剛剛在主線程中創建一個NSManagedObjectContext並將其傳遞給後臺工作線程(技術上,NSOperation子類)之後。新的上下文有可能以某種方式獲取主線程上下文的撤銷管理器嗎?我是否應該將NSPersistentStoreCoordinator實例傳遞給工作線程,並讓它創建自己的上下文? – adib 2010-07-25 17:38:12

回答

3

我終於找到了這個修復 - 簡單地don't use NSManagedObjectContext in a background thread that saves。我已經改變了我的方法,只依靠核心數據操作的主線程,它的工作原理。

對於一些背景信息,此代碼是News Anchor for Mac OS X的刷新週期的一部分,這是一個用於大聲讀取饋送信息的RSS閱讀器。該週期的目的是從互聯網加載RSS提要,並從提要文章創建新聞頻道片段。

+0

非常感謝 - 這可能也適用於iOS嗎? – 2011-02-17 14:28:39

+0

@nick你會在iOS中遇到類似的崩潰嗎? – adib 2011-02-24 01:07:48

+0

是的,我得到了相同的@adib。 – 2011-02-24 07:59:26

0

很難說給出的信息給你帶來了什麼問題。

看起來上下文和撤消管理器可能已經不同步。檢查任何自定義驗證代碼,如果驗證失敗,您可能必須查看它是否會填充必填屬性或關係。

+0

雖然沒有任何自定義驗證碼,但至少沒有我自己寫過。所有屬性都是可選的或具有默認值。 – adib 2010-07-23 07:06:28

0

首先在調試器中運行一個objc_exception_throw的斷點,這會導致您的應用在崩潰之前暫停。這會給你一個關於事故原因的暗示。

+1

我仍然不知道如何重現崩潰。 – adib 2010-07-24 03:39:00