2011-12-11 32 views
12

Tôi là một noob ở dữ liệu cốt lõi, do đó, ở đây đi.Dữ liệu cốt lõi - Lặp lại thông qua các thuộc tính của một NSManagedObject

Tôi có đối tượng dữ liệu cốt lõi, ví dụ như sinh viên.

Học sinh có các thuộc tính bờm, như tên, tuổi, dob, địa chỉ, v.v.

Bây giờ tôi cần hiển thị tất cả các thuộc tính này vào chế độ xem bảng.

Có cách nào dễ dàng để lặp qua sinh viên đối tượng không? Hay tôi phải chuyển đổi dữ liệu sang một số loại từ điển?

Nếu tôi cần chuyển đổi nó sang từ điển thì có hỗ trợ cho nó không? Hay tôi phải tự viết chức năng của mình.

Rất cám ơn sự giúp đỡ của bạn, Stephen

Trả lời

22

Đây là một cách rất đơn giản để lặp qua một NSManagedObject:

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

Các manh mối về cách thức để làm điều này (cộng thêm nhiều hơn nữa) đến từ Ole Bergmann blog: http://oleb.net/blog/2011/05/inspecting-core-data-attributes/

+0

là có cách nào tôi có thể làm ngược lại ở trên, tức là tôi có thể lưu một số giá trị bằng [NSManagedObject setObjectForkey: somekey] không? – pankaj

13

Nếu bạn giống tôi và đang cố gắng giải quyết vấn đề này trong Swift, đây là cách tôi đã làm.

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{ 

} 

Swift 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{ 

    } 

Nếu bạn muốn nhận được các đơn vị quan hệ khóa/giá trị cũng sau đó bạn nên sử dụng propertiesByName thay vì attributesByName như vậy:

SWIFT 3:

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

SWIFT 2:

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

Chỉ cần nhớ phải cẩn thận với giá trị vì nó là một NSManagedObject.

Các vấn đề liên quan