2012-08-23 11 views
5

Tôi gặp sự cố Tôi không biết nó đến từ đâu, liên quan đến CoreData. Trong cơ sở dữ liệu của tôi, có một tập hợp các loại (với tên và mô tả), có chứa các phần tử (sử dụng mối quan hệ một-nhiều).NSFetchedResultsController có 0 phần

Tôi muốn chia chế độ xem bảng của mình thành các thuộc tính của lớp Category, nhưng khi tôi cố gắng thực hiện bằng cách sử dụng sectionNameKeyPath:, kết quả là NSFetchedResultsController có 0 phần. Nếu tôi truyền nil cho tham số này, nó có 1 phần.

Mã này là như sau:

- (NSFetchedResultsController*) fetchedResultsController 
{ 
    if(fetchedResultsController) 
     return fetchedResultsController; 

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    // Edit the entity name as appropriate. 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Category" 
               inManagedObjectContext:self.managedObjectContext]; 
    [fetchRequest setEntity:entity]; 

    // Set the batch size to a suitable number. 
    [fetchRequest setFetchBatchSize:10]; 

    // Edit the sort key as appropriate. 

    NSSortDescriptor *checkDescriptor = [[NSSortDescriptor alloc] initWithKey:@"checked" 
                    ascending:YES]; 
    NSSortDescriptor *indexDescriptor = [[NSSortDescriptor alloc] initWithKey:@"orderIndex" 
                    ascending:YES]; 
    NSArray *sortDescriptors = @[checkDescriptor, indexDescriptor]; 

    [fetchRequest setSortDescriptors:sortDescriptors]; 

    // Edit the section name key path and cache name if appropriate. 
    // nil for section name key path means "no sections". 
    fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
                    managedObjectContext:self.managedObjectContext 
                    sectionNameKeyPath:@"checked" 
                       cacheName:nil]; 

    NSError *error = nil; 
    if (![fetchedResultsController performFetch:&error]) { 
     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
     abort(); 
     return nil; 
    } else { 
     fetchedResultsController.delegate = self; 
     return fetchedResultsController; 
    } 
} 

Trả lời

1

Xem tài liệu NSFetchedResultsController: Chìa khóa sử dụng cho sectionNameKeyPath ("name" trong trường hợp của bạn) phải là chìa khóa tương tự được sử dụng trong mô tả loại đầu tiên ("kiểm tra" trong trường hợp của bạn). Chúng có thể khác nhau, nhưng sau đó cả hai khóa phải tạo cùng một thứ tự tương đối.

Trong trường hợp của bạn, tôi giả định rằng bạn muốn thêm một bộ mô tả sắp xếp bổ sung vào "tên" và sử dụng nó làm bộ mô tả sắp xếp đầu tiên.

+0

Nó tiếp tục tạo 0 phần ... – gskbyte

+0

Bạn đã @synthesize fetchedResultsController chưa? Tôi đã có một vấn đề tương tự và đây là vấn đề. – Giovanni