0

これは、CoreData に精通している iPhone 開発者にとってはおそらく簡単ですが、私は知りませんし、重要な期限内にデータに適切にアクセスする方法を本当に知りたいと思っています.

これは、NSMutableArrayNSLogで設定され、プルされた後の私のコアデータです

Questions List KM: (
    "<Question: 0x8589630> (entity: Question; id: 0x8588820 <x-coredata://FDC76465-4884-473A-B46A-3451BCB74F5C/Question/p1> ; data: {\n    orderID = 0;\n    project = \"0x818e300 <x-coredata://FDC76465-4884-473A-B46A-3451BCB74F5C/Project/p1>\";\n    question = \"What is ...? \";\n    strategy = \"<relationship fault: 0x8264930 'strategy'>\";\n})",
    "<Question: 0x85898d0> (entity: Question; id: 0x8588830 <x-coredata://FDC76465-4884-473A-B46A-3451BCB74F5C/Question/p2> ; data: {\n    orderID = 1;\n    project = \"0x818e300 <x-coredata://FDC76465-4884-473A-B46A-3451BCB74F5C/Project/p1>\";\n    question = \"How is ...? \";\n    strategy = \"<relationship fault: 0x826fa60 'strategy'>\";\n})",
    "<Question: 0x8589930> (entity: Question; id: 0x8588840 <x-coredata://FDC76465-4884-473A-B46A-3451BCB74F5C/Question/p3> ; data: {\n    orderID = 2;\n    project = \"0x818e300 <x-coredata://FDC76465-4884-473A-B46A-3451BCB74F5C/Project/p1>\";\n    question = \"Where is ...? \";\n    strategy = \"<relationship fault: 0x826c430 'strategy'>\";\n})"
)

以下を使用して、これを配列に簡単にプルできました。

// fetch and sort questions
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Question"  inManagedObjectContext:self.managedObjectContext];
    [request setEntity:entity];

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"orderID" ascending:YES];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
    [request setSortDescriptors:sortDescriptors];

    NSError *error = nil;
    NSMutableArray *mutableFetchResults = [[self.managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
    if (mutableFetchResults == nil) {
        // Handle the error.
        NSLog(@"No Results in Questions Array.");
    }

    [self setQuestionsList:mutableFetchResults];

Question.h または質問の定義は次のとおりです。

#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>

@class Project, Strategy;

@interface Question : NSManagedObject

@property (nonatomic, retain) NSNumber * orderID;
@property (nonatomic, retain) NSString * question;
@property (nonatomic, retain) Project *project;
@property (nonatomic, retain) NSSet *strategy;
@end

@interface Question (CoreDataGeneratedAccessors)

- (void)addStrategyObject:(Strategy *)value;
- (void)removeStrategyObject:(Strategy *)value;
- (void)addStrategy:(NSSet *)values;
- (void)removeStrategy:(NSSet *)values;

@end

定義の Strategy.h は次のとおりです。

#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>

@class Question;

@interface Strategy : NSManagedObject

@property (nonatomic, retain) NSString * strategy;
@property (nonatomic, retain) Question *question;

@end

3 つの質問があることをデータの NsLog で確認できます。

  1. 質問 = 「何ですか?
  2. 質問 = 「どうですか...?
  3. 質問 = 「... はどこですか?

また、リレーションシップに戦略セクションがあることも示しています。

strategy = \"<relationship fault: 0x826c430 'strategy'>\

私ができる必要があるのは、この戦略にアクセスし、それにタイプ NSString の単一のオブジェクトを追加することです。

割り当てられたら、戦略として NSMutableArray にプルして、UITableView にプッシュする必要があります。

私はこれを理解することがたくさんあることを知っていますが、アップルの第一人者にとって、これはおそらくケーキとアイスクリームのように聞こえます.

回答にさらに情報が必要な場合は、コメントでお知らせください....素晴らしいStackOverflowメンバーがかつて私に言った

「最も難しいのは、正しい質問の仕方を見つけることです。」

どんな助けでも大歓迎です!

4

2 に答える 2

0

フェッチ要求を使用してすべての Question エンティティを配列に入力し、それを使用してテーブルを提供する代わりに、http://developer.apple.com/library/ios/#DOCUMENTATION/CoreData/Reference/NSFetchedResultsController_Class をNSFetchedResultsController ご覧ください。 /参照/参照.html

これは、テーブル ビューのデータ ソースとして非常に簡単に使用でき、要求された型のすべてのエンティティを一度にメモリにロードするわけではありません。3 つの質問は問題にならないかもしれませんが、質問を追加できれば、将来問題になり始める可能性があります。

Martin R は、2 つのエンティティ間の関係にアクセスする場合について正しい考えを持っています。ただし、各質問に複数の戦略を含めることができるが、各戦略に 1 つの質問しか含めることができない場合、エンティティが保証されるかどうかはわかりません。NSSetQuestion エンティティの属性に文字列の を直接格納する方法を確認したい場合があります。(属性タイプを「データ」に設定して配列を格納できると確信していますが、その方法を確認するにはそれを調べる必要があります)。

于 2013-07-11T18:05:57.507 に答える