2011-12-11 14 views
12

私はコアデータでnoobですのでここに入ります。コアデータ - NSManagedObjectの属性を反復する

私は、例えば学生のようなコアデータオブジェクトを持っています。

名前、年齢、dob、住所などのような気分属性を持っています。

ここでは、これらのすべての属性をテーブルビューに表示する必要があります。

対象学生を反復する簡単な方法はありますか?または、データをある種の辞書に変換する必要がありますか?

辞書に変換する必要がある場合は、それをサポートしていますか?それとも自分自身の機能を書く必要がありますか?オレバーグマンさんから来

NSEntityDescription *entity = [myManagedObject entity]; 
NSDictionary *attributes = [entity attributesByName]; 
for (NSString *attribute in attributes) { 
    id value = [myManagedObject valueForKey: attribute]; 
    NSLog(@"attribute %@ = %@", attribute, value); 
} 

これを行う方法についての手がかり(プラスより提供):あなたの助けのための

多くのおかげで、 スティーブンは

答えて

22

ここNSManagedObjectを反復処理するための非常にシンプルな方法ですブログ:http://oleb.net/blog/2011/05/inspecting-core-data-attributes/

+0

私は上記の逆を行うことができますどのような方法ですが、私は[NSManagedObject setObjectForkey:somekey]を使用していくつかの値を保存することができるはずですか? – pankaj

13

私が好きで、Swiftでこの問題を解決しようとしているのなら、ここで私がやったのです。

SWIFT 3:

let request:NSFetchRequest<ENTITY_NAME> 
if #available(iOS 10.0, *){ 
    request = ENTITY_NAME.fetchRequest() as! NSFetchRequest<ENTITY_NAME> 
}else{ 
    request = NSFetchRequest<ENTITY_NAME>(entityName: "ENTITY_NAME") 
} 

do{ 
    let entities = try YOUR_MOC.fetch(request) 
    for item in entities{ 
     for key in item.entity.attributesByName.keys{ 
      let value: Any? = item.value(forKey: key) 
      print("\(key) = \(value)") 
     } 
    } 
}catch{ 

} 

スウィフト2:

let request = NSFetchRequest(entityName: "ENTITY_NAME") 
    do{ 
     let entities = try YOUR_MOC.executeFetchRequest(request) as! [YOUR_ENTITY] 
     for item in entities{ 
      for key in item.entity.attributesByName.keys{ 
       let value: AnyObject? = item.valueForKey(key) 
       print("\(key) = \(value)") 
      } 

     } 
    }catch{ 

    } 

あなたにも関係エンティティにキー/値を取得したい場合、あなたはそのようなpropertiesByNameの代わりattributesByName使用する必要があります。

SWIFT 3:

for key in item.entity.propertiesByName.keys{ 
    let value: Any? = item.value(forKey: key) 
    print("\(key) = \(value)") 
} 

SWIFT 2:それはNSManagedObjectであるため、

for key in item.entity.propertiesByName.keys{ 
    let value: AnyObject? = item.valueForKey(key) 
    print("\(key) = \(value)") 
} 

ちょうど値に注意してくださいすることを忘れないでください。

関連する問題