1

私は、マネージドオブジェクトコンテキストで作業しているほぼすべてのファイルで、自分のプロジェクトのNSFetchedResultsControllerコードを常時パッティング/リピートする必要があります。NSFetchedResultsControllerを管理対象オブジェクトクラスに入れることはできますか?

繰り返しコードの量を減らしたいと思います。このような繰り返しのCRUDのようなコードをモデルクラスの中に入れたいと思います。

私の代わりに、すべてのカスタムNSFetchを関連するエンティティ(つまり:Company.m、Employee.m)のマネージドオブジェクトクラスに入れたいとします。

アップルのCore Booksサンプルコードでも、このコードをManaged Object Classに入れていないのですが、可能かどうか疑問に思っていますか?

私はCompany.mクラスにコードを貼り付けようとしましたが、managedObjectContextについて不平を言っていますし、また、パラメータとしてもfetchedResultsControllerが宣言されていないと文句を言うのですか?

理想的には、エンティティ管理対象クラス内にフェッチリクエスト/結果コントローラの種類をたくさん置いておきたいと思います。

しかし私が自分よりも先に進む前に、NSFetchedResultsControllerのすべてをEntity Managed Objectクラスに入れることは可能でしょうか?

これをカバーするサンプルチュートリアルやプロジェクトやソースコードがある場合はそれも素晴らしいでしょう。

ありがとうございました。

(コードサンプルが続きます)。

/** 
Returns the fetched results controller. Creates and configures the controller if necessary. 
*/ 
- (NSFetchedResultsController *)fetchedResultsController 
{ 

    if (fetchedResultsController != nil) { 
     return fetchedResultsController; 
    } 

    // Create and configure a fetch request with the Book entity. 
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Company" inManagedObjectContext:managedObjectContext]; 
    [fetchRequest setEntity:entity]; 

    // Create the sort descriptors array. 
    NSSortDescriptor *authorDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES]; 
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:authorDescriptor, nil]; 
    [fetchRequest setSortDescriptors:sortDescriptors]; 

    // Create and initialize the fetch results controller. 
    NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:@"author" cacheName:@"Root"]; 
    self.fetchedResultsController = aFetchedResultsController; 
    fetchedResultsController.delegate = self; 

    // Memory management. 
    [aFetchedResultsController release]; 
    [fetchRequest release]; 
    [authorDescriptor release]; 
    [sortDescriptors release]; 

    return fetchedResultsController; 
}  

答えて

2

xmodにActiveRecordを使用することをおすすめします。コアデータモデルを変更すると、CoreDataはCRUDを上書きします。 ActiveRecordは、[MyManagedObject createEntity];NSArray *myObjects = [MyManagedObject findAll];のように簡単に呼び出します。findAll呼び出しをフィルタリングする述語を渡すオプションもあります。 xmodを追加すると、生成されたクラスのサブクラスが生成されるので、オーバーライドされないようにエンティティにカスタムロジックを追加できます。

編集:実際に使用しているので、このActive Recordの実装にリンクを追加したいと思います。

Edit2:これは現在Magical Recordに名前が変更されました。

+0

よろしくお願いいたします。 – zardon

+0

私はActive RecordやMagical Recordを使用する機会がありませんでした。私はMagicalPandaのコードを100%動かすことはありませんでしたが、私は確かに正しい方向へのステップと考えています。 AppleがiOSの中にフレームワークのような独自のnoSQLを持っていれば、これも素晴らしいだろう。 – zardon