2012-05-16 22 views
7

Làm cách nào để thiết lập yêu cầu tìm nạp để chỉ lấy dữ liệu từ thuộc tính của một thực thể với một giá trị cụ thể? Đây là mã cơ bản mà tôi đã sử dụng trước đây.tìm nạp yêu cầu cho entity.attribute == @ "somevalue"

-(void)fetchResults 
{ 
    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:self.entityDescription.name]; 
    NSString *cacheName = [self.entityDescription.name stringByAppendingString:@"Cache"]; 

    // predicate code 
    if (self.predicate != nil) { 
     [fetchRequest setPredicate:self.predicate]; 
    } 
    // end of predicate code 

    NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]; 
    [fetchRequest setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]]; 

    self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:cacheName]; 

    BOOL success; 
    NSError *error; 
    success = [self.fetchedResultsController performFetch:&error]; 
    if (!success) 
    { 
     NSLog(@"%@", [error localizedDescription]); 
    } 
} 

Tôi đã xem trang này: http://bit.ly/KevYwR Đây có phải là hướng dẫn đúng không?

Tôi có cần sử dụng NSPredicate hoặc tôi có thể làm mà không cần không?

Nhờ sự giúp đỡ, điểm đi đúng hướng, vv

Trả lời

19

Thiết lập một NSFetchRequest là tương đương với một statetement SELECT trong ngôn ngữ SQL.

Dưới đây là một ví dụ đơn giản:

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
[request setEntity:[NSEntityDescription entityForName:@"EntityName" inManagedObjectContext:moc]]; 

NSError *error = nil; 
NSArray *results = [moc executeFetchRequest:request error:&error]; 

// error handling code 

Mảng results chứa tất cả các đối tượng được quản lý chứa trong các tập tin SQLite. Nếu bạn muốn lấy một đối tượng cụ thể (hoặc nhiều đối tượng), bạn cần sử dụng một vị từ với yêu cầu đó. Ví dụ:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"attribute == %@", @"Some Value"]; 
[request setPredicate:predicate]; 

Trong trường hợp này results chứa các đối tượng mà thuộc tính là tương đương với Some Value. Thiết lập một vị từ bằng mệnh đề WHERE trong câu lệnh SQL.

Note

Tôi cho rằng tên của thực thể là EntityName và tài sản của nó được gọi attribute đó là kiểu string.

Để biết thêm thông tin, tôi khuyên bạn nên đọc Hướng dẫn lập trình dữ liệu cốt lõi và tham chiếu lớp NSFecthRequest.

Hy vọng nó giúp.