3

作成しているドキュメントベースのiOSアプリで、CoreDataにNSManagedObjectサブクラスの一部を更新させるのに問題があります。

問題は、現在のドキュメントに未保存の変更があるときにユーザーが2番目のドキュメントをロードする状況に対処することです。現時点では、ユーザーが最初のドキュメントを再度ロードすると、未保存の変更が表示されます。ドキュメントは、ドキュメントのルートオブジェクトのNSFetchRequestを使用してロードされます。このフェッチリクエストでは、プロパティがに-setShouldRefreshRefetchedObjects:設定されYES、プロパティ -setIncludesPendingChanges:がに設定されNOています。アプリを終了して再起動すると、元の変更されていないドキュメントが表示されるため、永続ストアに保存されていないことを確認します。また、SQLデバッグをオンにしていますが、アプリが2回目に関連するテーブルからフェッチしていないことを示しています

4

2 に答える 2

9

この質問はすでに回答されていることは知っていますが、NSManagedObjectContextのメソッドrefreshObject:mergeChanges:を使用するのはどうですか?

NSManagedObjectクラスリファレンスrefreshObject:mergeChangesを参照してください。

于 2013-12-15T04:52:36.417 に答える
0

このリンクは、NSManagedObjectへの変更を元に戻すためのカテゴリを追加するのに役立つ場合があります。幸運を祈ります。

#import "NSManagedObject+RevertChanges.h"

@implementation NSManagedObject (NSManagedObject_RevertChanges)

- (void) revertChanges {
    // Revert to original Values
    NSDictionary *changedValues = [self changedValues];
    NSDictionary *committedValues = [self committedValuesForKeys:[changedValues allKeys]];
    NSEnumerator *enumerator;
    id key;
    enumerator = [changedValues keyEnumerator];

    while ((key = [enumerator nextObject])) {
        NSLog(@"Reverting field ""%@"" from ""%@"" to ""%@""", key, [changedValues objectForKey:key], [committedValues objectForKey:key]);
        [self setValue:[committedValues objectForKey:key] forKey:key];
    }
}
于 2013-02-01T01:52:43.020 に答える