私のコアデータモデルは保存されません。私は1種類のオブジェクト(グラフ - 下記参照)を挿入することができ、保存が機能します。私はその種のオブジェクトの複数のコピーを追加することができ、保存が機能します。私が別のオブジェクトを挿入すると、通常はこれで失敗します:コアデータEXC_BAD_ACCESSが保存に失敗しましたか?
#2 0x00007fff86c342c8 in -[NSManagedObjectContext(_NSInternalAdditions) _changeIDsForManagedObjects:toIDs:]()
他のオブジェクトは複雑ではありません。文字列と数値だけです。それらの値は保存時に設定されます。私はNSPersistentDocumentのちょうど初期化するプログラムを削減しました:次は私のNSPersistentDocumentサブクラスでinitWithType:error:
に呼び出され、関連するコードです:実行すると
...
// Disable undo registration before inserting default objects
[[[self managedObjectContext] undoManager] disableUndoRegistration];
// Insert the root graph
self.root = [NSEntityDescription insertNewObjectForEntityForName:@"Graph" inManagedObjectContext:[self managedObjectContext]];
self.root.createdDate = [NSDate date];
self.root.lastModifiedDate = [NSDate date];
self.root.name = @"Untitled Model";
self.root.colour = [NSColor colorWithDeviceRed:0.6 green:0.6 blue:0.6 alpha:1.0];
// Insert default drawing parameters
// fails when including this line
self.drawing = [NSEntityDescription insertNewObjectForEntityForName:@"Drawing" inManagedObjectContext:[self managedObjectContext]];
[[self managedObjectContext] processPendingChanges];
[[[self managedObjectContext] undoManager] enableUndoRegistration];
...
、私が取得:
2011-07-23 07:46:58.012 Z2[15774:a0f] Managed Object Context: <NSManagedObjectContext: 0x2000c65e0>
2011-07-23 07:46:58.013 Z2[15774:a0f] Persistent Store Coordinator: <NSPersistentStoreCoordinator: 0x200063700>
2011-07-23 07:46:58.013 Z2[15774:a0f] Entity: Graph
...<full Entity list>
2011-07-23 07:46:58.016 Z2[15774:a0f] Entity: Drawing
2011-07-23 07:46:58.018 Z2[15774:a0f] Object: <Graph: 0x20004e220> (entity: Graph; id: 0x20003e400 <x-coredata:///Graph/t527187E0-DC67-4A9E-BA88-67A4CD3445222> ; data: {
colour = "(...not nil..)";
createdDate = "2011-07-22 21:46:54 +0000";
errorString = nil;
firstDate = nil;
lastDate = nil;
lastModifiedDate = "2011-07-22 21:46:54 +0000";
lines = ();
name = "Untitled Model";
nodes = ();
profiles = ();
test = 0;
warningString = nil;
})
2011-07-23 07:46:58.019 Z2[15774:a0f] Object: <Drawing: 0x20004f140> (entity: Drawing; id: 0x200062280 <x-coredata:///Drawing/t527187E0-DC67-4A9E-BA88-67A4CD3445223> ; data: {
centrex = 0;
centrey = 0;
textSize = 12;
typeface = "Helvetica Neue";
zoomFactor = 1;
})
Program received signal: “EXC_BAD_ACCESS”.
すべてのエンティティを持っていますNSManagedObjectをサブクラス化する独自のクラス。すべての属性は動的プロパティとして定義されます。すべての属性はデフォルト値を持っています。
私は、他の人がこのタイプの問題に対して過剰リリースを提案しているのを見ましたが、私はコアデータコードのどこにでも保持してリリースしません。どのEntityをGraphオブジェクトの後に挿入するかは問題ではありません。彼らはすべて失敗する。
コアデータの作業は、フレームワーク(グラフ)によって行われます。フレームワークは、フレームワークのドキュメント作成オブジェクトをサブクラス化するドキュメントベースのアプリケーション(Z)から呼び出されます。
は、ここでセーブパネルの端からスタックトレースです:それはオブジェクトIDの変更に失敗したので
Program received signal: “EXC_BAD_ACCESS”.
sharedlibrary apply-load-rules all
(gdb) bt
#0 0x00007fff80352480 in CFDictionarySetValue()
#1 0x00007fff86c0b2ed in _PFCMT_SetValue()
#2 0x00007fff86c342c8 in -[NSManagedObjectContext(_NSInternalAdditions) _changeIDsForManagedObjects:toIDs:]()
#3 0x00007fff86c44b2b in -[NSSQLCore commitChanges:]()
#4 0x00007fff86c3926e in -[NSSQLCore saveChanges:]()
#5 0x00007fff86bfcc8b in -[NSSQLCore executeRequest:withContext:]()
#6 0x00007fff86bfc051 in -[NSPersistentStoreCoordinator(_NSInternalMethods) executeRequest:withContext:]()
#7 0x00007fff86c3in -[NSManagedObjectContext save:]()
#8 0x00007fff8144179d in -[NSPersistentDocument writeToURL:ofType:forSaveOperation:originalContentsURL:error:]()
#9 0x0000000100020460 in -[GraphDocument writeToURL:ofType:forSaveOperation:originalContentsURL:error:] (self=0x2000c4be0, _cmd=0x7fff816eb6ce, absoluteURL=0x20004eec0, typeName=0x20000ea80, saveOperation=1, absoluteOriginalContentsURL=0x0, outError=0x7fff5fbfe308) at /<path to>/GraphDocument.m:380
#10 0x00000001000010bc in -[ZDocument writeToURL:ofType:forSaveOperation:originalContentsURL:error:] (self=0x2000c4be0, _cmd=0x7fff816eb6ce, absoluteURL=0x20004eec0, typeName=0x20000ea80, saveOperation=1, absoluteOriginalContentsURL=0x0, outError=0x7fff5fbfe308) at /<path to>/ZDocument.m:110
#11 0x00007fff81316bd2 in -[NSDocument _writeSafelyToURL:ofType:forSaveOperation:error:]()
#12 0x00007fff81315fd0 in -[NSDocument writeSafelyToURL:ofType:forSaveOperation:error:]()
#13 0x00007fff814406dc in -[NSPersistentDocument writeSafelyToURL:ofType:forSaveOperation:error:]()
#14 0x00007fff81311356 in -[NSDocument saveToURL:ofType:forSaveOperation:error:]()
#15 0x00007fff81314404 in -[NSDocument _saveToURL:ofType:forSaveOperation:delegate:didSaveSelector:contextInfo:]()
#16 0x00007fff81311637 in -[NSDocument saveToURL:ofType:forSaveOperation:delegate:didSaveSelector:contextInfo:]()
#17 0x00007fff8131377c in -[NSDocument _savePanelWasPresented:withResult:inContext:]()
#18 0x00007fff8148335e in -[NSSavePanel _didEndSheet:returnCode:contextInfo:]()
#19 0x00007fff81227d45 in -[NSApplication endSheet:returnCode:]()
'Graph'オブジェクトを最初に挿入しないと' Drawing'オブジェクトを挿入できますか? – TechZen
あなたはすべての例外を止めていますか? EXC_BAD_ACCESSを取得する前にエラーが発生しているかどうか疑問に思っています。 – paulmelnikow