2009-08-23 15 views
2

私は、管理対象オブジェクトのコンテキスト外でコアデータ管理対象オブジェクトを使用したいと考えています。私はあなたがこれをしないと言うこのサイトの他のスレッドを見ましたが、ここに私の問題があります:管理対象オブジェクトコンテキスト外でCore Data Objectsを使用するにはどうすればよいですか?

私は 'フィード'オブジェクトと '物語'オブジェクトを持っています。フィードはRSSフィードのようなものであり、ストーリーはそのフィードの1つのストーリーのようなものです。フィードをブックマークする機能はありますが、コアデータを使用してそれらを保持していますが、フィードからストーリーをダウンロードすると、そのストーリーを管理オブジェクトコンテキストに挿入したくありません。私のオブジェクトを作成するための唯一の方法は、しかし、これを行うことにより、次のとおりです。

[NSEntityDescription insertNewObjectForEntityForName:name inManagedObjectContext:managedObjectContext]; 

それは保存し、次のイベントで永続化されることを意味します。

これらのオブジェクトは、ユーザーが選択するまで永続化しないようにしてください。

"TransientStory"と "PersistentStory"を、どちらも実装している "Story"というプロトコルで定義しようとしましたが、それは悪夢です。何か案は?

答えて

1

インメモリストアで新しいNSManagedObjectContextを作成します。その後、一時的なオブジェクトをこのコンテキストに置くことができ、永続化されません。

NSManagedObjectModel *mom = [NSManagedObjectModel mergedModelFromBundles:[NSArray arrayWithObject:[NSBundle mainBundle]]]; // though you can create a model on the fly (i.e. in code) 
NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc]  initWithManagedObjectModel:mom]; 

NSError *err; 

// add an in-memory store. At least one persistent store is required 
if([psc addPersistentStoreWithType:NSInMemoryStoreType configuration:nil URL:nil options:nil error:&err] == nil) { 
    NSLog(@"%@",err); 
} 

NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] init]; 
[moc setPersistentStoreCoordinator:psc]; 

これを永続化したい場合は、後で適切なストアに移動するか、コンテキストをマージしてください。あなたは最終的にはとにかくそのコンテキストにそれらを置くつもりなら

また、(すなわち、あなたはちょうど彼らが保存されているまで、彼らはリストに表示されてしたくない)、その後、ちょうどあなたのNSFetchRequestNOsetIncludesPendingChangesを設定します。

2

あなたはこれらのオブジェクトを作成し、ちょうど文脈でそれらを挿入することはできません。

NSEntityDescription *entity = [NSEntityDescription entityForName:entityName 
              inManagedObjectContext:managedContext]; 
ManagedObjectClass *volatileObject = [[ManagedObjectClass alloc] initWithEntity:entity 
               insertIntoManagedObjectContext:nil]; 

そして、あなたはそれを保存したい場合は、あなただけのコンテキストにそれを挿入します。

[managedContext insertObject:volatileObject]; 

(もしあればそれを追加することを忘れて、それは文脈でそれを保存しようとするとあなたにぶら下がりのオブジェクトエラーを与えるでしょう)

関連する問題