Đoạn mã sau đây cho biết cách truy xuất đối tượng khớp với vị từ cụ thể. Nếu không có các đối tượng như vậy, đoạn mã sẽ hiển thị cách tạo một đối tượng mới, lưu nó và trả về nó.
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"YourEntityName" inManagedObjectContext:managedObjectContext];
[request setEntity:entity];
// retrive the objects with a given value for a certain property
NSPredicate *predicate = [NSPredicate predicateWithFormat: @"property == %@", value];
[request setPredicate:predicate];
// Edit the sort key as appropriate.
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"yourSortKey" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[request setSortDescriptors:sortDescriptors];
// Edit the section name key path and cache name if appropriate.
// nil for section name key path means "no sections".
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"];
aFetchedResultsController.delegate = self;
NSError *error = nil;
NSArray *result = [managedObjectContext executeFetchRequest:request error:&error];
[request release];
[sortDescriptor release];
[sortDescriptors release];
if ((result != nil) && ([result count]) && (error == nil)){
return [NSMutableArray arrayWithArray:result];
}
else{
YourEntityName *object = (YourEntityName *) [NSEntityDescription insertNewObjectForEntityForName:@"YourEntityName" inManagedObjectContext:self.managedObjectContext];
// setup your object attributes, for instance set its name
object.name = @"name"
// save object
NSError *error;
if (![[self managedObjectContext] save:&error]) {
// Handle error
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
}
return object;
}
Nguồn
2009-09-17 12:52:32
wow, đó là nhanh chóng! Hãy để tôi thử điều đó ... – winsmith
Điểm của 'aFetchedResultsController' là gì? Tôi nhầm khi nghĩ rằng bạn tạo ra nó, nhưng sau đó không bao giờ sử dụng nó để làm bất cứ điều gì? – ArtOfWarfare
Bạn nói đúng, trong ví dụ cụ thể này NSFetchedResultsController không được sử dụng, nhưng nó phải ở trong bối cảnh của một ứng dụng thực (nó đơn giản hóa nhiều thứ khác, và cung cấp một cơ chế bộ nhớ đệm tốt đẹp). –