私の NSOrderedSets に問題があります。
「プロジェクト」と「図面」というコアデータ エンティティがあります。プロジェクトには多くの図面があります。関係は 1 対多で順序付けられているため、プロジェクト オブジェクトには図面の NSOrderedSet が含まれています。
私のアプリはシングル スレッドであり、描画オブジェクトの順序を変更したい場合に頭痛の種になります。
次のコードで図面を並べ替えます...
-(IBAction)onTestReOrder:(id)sender
{
NSMutableOrderedSet *exchange = [self.currentProject.drawings mutableCopy];
[exchange exchangeObjectAtIndex:0 withObjectAtIndex:1];
self.currentProject.drawings = exchange;
// Save
id delegate = [[UIApplication sharedApplication]delegate];
NSManagedObjectContext *managedObjectContext = [delegate managedObjectContext];
NSError *error = nil;
if( ![managedObjectContext save:&error] )
{
NSLog(@"%@ Save: Unresolved Error on Save %@, %@", methodName, error, [error userInfo] );
abort();
}
}
これはすべてうまくいくようです。基礎となる Sqlite データストアが更新され、並べ替えが反映されているようです。
再注文後に図面内のプロパティに変更を書き込もうとすると、問題が発生します。例えば...
drawing = [self.currentProject.drawings objectAtIndex:1];
drawing.current = [NSNumber numberWithBool:YES];
// Save....causes NSMergeConflict
id delegate = [[UIApplication sharedApplication]delegate];
NSManagedObjectContext *managedObjectContext = [delegate managedObjectContext];
NSError *error = nil;
// BANG ON SAVE....NSMergeConflict
if( ![managedObjectContext save:&error] )
{
NSLog(@"%@ Save: Unresolved Error on Save %@, %@", methodName, error, [error userInfo] );
abort();
}
ここでの Save 呼び出しは、NSMergeConflict を作成します。スナップショットを見ると、図面のプロジェクトは古いものと新しいもので異なるようですが、これはシングル スレッド アプリであり、ManagedObjectContext は 1 つだけです。「プロジェクト」への異なる参照を持つにはどうすればよいですか?
私はこれに髪を引っ張っています.NSMergeConflictを解決するのに役立つヒントは大歓迎です.
/合う
エラー...
2013-10-26 23:40:38.047 testDesign[34625:a0b] setCurrentDrawing Save: 保存時の未解決エラー エラー Domain=NSCocoaErrorDomain Code=133020 「操作を完了できませんでした。(Cocoa エラー 133020)」 UserInfo=0xc148180 { conflictList=( "NSManagedObject (0xb3f0030) の NSMergeConflict (0xc151860)、objectID '0xb379040'、oldVersion = 58、newVersion = 59、古いオブジェクトのスナップショット = {\n angle = 0;\n current = 1;\n depth = \" 4.8768\";\n project = \"0xb3eec60 \";\n offsetX = 0;\n offsetY = 0;\n type = 0;\n width = \"9.7536\";\n} そして新しくキャッシュされた行 = {\n 角度 = 0;\n 現在 = 1;\n 深さ = \"4.8768\";\n プロジェクト = \"0xc1f3cb0 \";\n オフセットX = 0;\n オフセットY = 0;\n タイプ = 0 ;\n 幅 = \"9.7536\";\n}")}、