2

NSManageObjectをCoreDataのエンティティとして設定しています。エンティティをフェッチした後、すべての属性をプルしてNSMutableArrayに入れ、UITableViewにデータを入力できるようにしたいと思います。

例: エンティティ: プロジェクト

属性: startDate(必須); finishDate(オプション); projectName(必須); 等....

これらすべてをNSMutableArrayに取り込むにはどうすればよいですか?または、UITableViewにデータを入力するためのより良い方法はありますか?

4

3 に答える 3

7

NSEntityDescriptionこれは、NSAttributeDescriptionオブジェクトを要求することで取得できます。

NSManagedObject *object = ...;
NSEntityDescription *entity = [object entity];
NSDictionary *attributes = [entity attributesByName];

NSMutableArray *values = [NSMutableArray array];
for (NSString *attributeName in attributes) {
  id value = [object valueForKey:attributeName];
  if (value != nil) {
    [values addObject:value];
  }
}

注:これには属性のみが含まれ、関係は含まれません。関係の値のみが必要な場合は、を使用できます-relationshipsByName。属性と関係の両方が必要な場合は、を使用できます-propertiesByName

これが良い考えであるかどうかの決定は、読者の練習問題として残されています。

于 2012-10-17T02:58:58.527 に答える
0

編集

null以外の属性の配列を返すメソッドをエンティティに追加するだけです。

- (NSMutableArray*)nonNullAttributes {
    NSMutableArray *mutableArray = [[NSMutableArray alloc] initWithCapacity:0];

    //Pretend you have an attribute of startDate
    if (startDate && startDate != null) {
        [mutableArray addObject:startDate]
    }

    //Do this for all of your attributes.
    //You might want to convert the attributes to strings to allow for easy display in the tableview.

    return mutableArray;
}

これをNSManagedObjectサブクラスに追加できます。次に、配列の数を使用して、行数を知ることができます。

元の回答

なぜわざわざ属性を配列に入れるのですか?テーブルビューにデータを入力するときに、エンティティから直接アクセスするだけです。

于 2012-10-17T02:39:22.990 に答える
0

executeFetchRequest配列を取得するため だけに使用することはできませんか?

NSEntityDescription *entity = [NSEntityDescription
                                   entityForName:@"Project"    
                                   inManagedObjectContext:someContext];
[fetchRequest setEntity:entity];
NSArray *fetchedObjects = [someContext executeFetchRequest:fetchRequest error:&error];
于 2012-10-17T02:45:11.113 に答える