2010-03-11 43 views
7

Tôi mới làm quen với dữ liệu cốt lõi và cố gắng có được tất cả các đối tượng trẻ em thuộc nhiều loại khác nhau với một truy vấn. Giả sử có một loại "Động vật" làm cha mẹ và "Mèo", "Chó" và "Chim" làm trẻ em. Tôi muốn có cả mèo và chó, nhưng không phải chim trong câu truy vấn đơn lẻ được trả về làm vật thể. Có thể không?Làm thế nào để sử dụng NSPredicate để bắt các đối tượng trẻ em?

Trả lời

5

Managed objects have an entity property, vì vậy bạn sẽ có thể kết hợp với Kevin Sylvestre's solutiona predicate của entity.name != "Bird".

+0

thực thể là một phương pháp, không phải là tài sản .. – cocoapriest

+1

Đó là một tài sản không chính thức, trong khi bạn có thể sử dụng KVC để truy cập nó (vì có phương thức ở đó), trái ngược với chính thức ('@ property') bất động sản. –

+0

Bạn thực sự không thể sử dụng phương thức này với một kho lưu trữ SQLite vì thuộc tính 'entity' không có sẵn khi các đối tượng bị lỗi. Bạn không có nhiều lựa chọn nhưng để thực hiện bước lọc tìm nạp. –

3

Vâng, nó có thể:

// Load delegate from application and context from delegate. 
SampleAppDelegate *delegate = [[UIApplication sharedApplication] delegate]; 
NSManagedObjectContext *context = delegate.managedObjectContext; 

// Create new request. 
NSFetchRequest *request = [[NSFetchRequest alloc] init]; 

// Create entity description using delegate object context. 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Animal" inManagedObjectContext:context]; 

// Set entity for request. 
[request setEntity:entity]; 
[request setIncludesSubentities:YES]; 

// Load array of documents. 
NSError *error; 
NSArray *animals = [context executeFetchRequest:request error:&error]; 

// Release request. 
[request release]; 

// Access array. 
for (id animal in animals) { } 
+0

cảm ơn phản hồi nhanh. Tôi xin lỗi, tôi quên đề cập đến điều quan trọng nhất: có thêm một đứa trẻ nữa (nói "Chim"). Những gì tôi cần là, để có được cả Mèo và Chó, nhưng KHÔNG phải Chim. Tôi đã chỉnh sửa câu hỏi chính – cocoapriest

0

Trong khi điều này (entity.name != "Bird") có thể hoạt động nếu bạn chỉ có "Mèo", "Chó" và "Chim", nó không hoạt động nếu sau này bạn thêm "Động vật". Bạn cũng có thể sử dụng entity.name == "Dog" && entity.name == "Cat"

Đó là trường hợp "... bạn có bao giờ có bất kỳ trường hợp nào khác trong trường hợp của bạn, Động vật không?"

Vui chơi =)

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