2010-07-14 26 views
13

Tôi có một ứng dụng đang chạy tốt dưới OS3 +. Nhưng nó không hoạt động theo OS4. Tôi nhận được thông báo lỗi sau:'NSFetchedResultsController không hỗ trợ cả theo dõi thay đổi và tìm nạp yêu cầu với NSDictionaryResultType'

'NSFetchedResultsController không hỗ trợ cả hai theo dõi sự thay đổi và lấy yêu cầu với NSDictionaryResultType'

Liệu nó rung chuông cho bất cứ ai ở đây?

- (NSFetchedResultsController *)fetchedResultsController { 

    if (fetchedResultsController != nil) { 
     return fetchedResultsController; 
    } 

    /* 
    Set up the fetched results controller. 
    */ 
    // Create the fetch request for the entity. 
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    // Edit the entity name as appropriate. 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"myEntity" inManagedObjectContext:managedObjectContext]; 

    [fetchRequest setEntity:myEntity]; 

    [fetchRequest setResultType:NSDictionaryResultType]; 

    [fetchRequest setPropertiesToFetch :[NSArray arrayWithObjects:@"FIELD1",@"FIELD2",@"FIELD3",@"FIELD4",@"FIELD5",nil]];  

    // Setting unique values   
    [fetchRequest setReturnsDistinctResults:YES];  

    // Edit the sort key as appropriate. 
    NSSortDescriptor *initialDescriptor = [[NSSortDescriptor alloc] initWithKey:@"FIELD1" ascending:YES]; 

    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:initialDescriptor, nil]; 

    [fetchRequest 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:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:@"FIELD1" cacheName:@"myCache"]; 

    aFetchedResultsController.delegate = self; 
    self.fetchedResultsController = aFetchedResultsController; 
    [aFetchedResultsController release]; 
    [fetchRequest release]; 
    [initialDescriptor release]; 
    [sortDescriptors release];  

    return fetchedResultsController; 
}  

Xin cảm ơn trước.

+0

Nếu tôi đặt [fetchRequest setResultType: NSManagedObjectResultType] thay vì [fetchRequest setResultType: NSDictionaryResultType], ứng dụng của tôi sẽ tải bình thường. ' NHƯNG [fetchRequest setReturnsDistinctResults: YES] không hoạt động nữa và tôi kết thúc với bản sao !!!! Trợ giúp bắt buộc. :-) –

Trả lời

14

Lỗi này đề cập đến thực tế là bạn đang cố gắng để có được kết quả NSDictionary, nhưng sau đó cũng mong đợi bộ điều khiển kết quả được tìm nạp để xem thay đổi. Vì những thay đổi sẽ chỉ lan truyền qua NSManagedObjects, bộ điều khiển kết quả đã tìm nạp không còn có thể thực hiện công việc của nó nữa.

Sử dụng NSManagedObjectResultType không hoạt động vì sau đó setPropertiesToFetch: không còn áp dụng được nữa. Thay vào đó, bạn sẽ phải thực hiện một số kết hợp của riêng bạn sau khi bộ kết quả được biết, mà sẽ làm cho việc sử dụng với một bộ điều khiển kết quả tìm nạp khá khó khăn.

Câu trả lời hay nhất là không đặt tên bộ nhớ cache hoặc đại biểu cho bộ điều khiển kết quả được tìm nạp, trong trường hợp này nó sẽ là not perform any change tracking.

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