5

Thiết lập: UITableView với FRC. Hàng là danh sách đơn giản của người sử dụng nội dung văn bản có thể kéo để làm mới để có được mới nhất.NSFetchedResultsController (và UITableView) các phương thức ủy nhiệm gọi ngày càng tăng

Tôi thấy có hành vi lạ khi cellForRow được gọi cho mỗi hàng, nhiều lần. Vì vậy, tôi thấy nó cho 0,0 0,1 0,2 0,3 (hàng nhìn thấy được), nhưng tất cả 4 hàng này đều có cellForRow được gọi là nhiều lần. Nhưng lần đầu tiên bạn xem danh sách chúng được gọi một lần. Lần thứ hai, hai lần, vv Lần thứ 7, sau khi người dùng nhìn thấy nội dung, đằng sau hậu trường, nó tiếp tục cố gắng và định cấu hình ô nhiều lần và cuối cùng bị treo.

Vì vậy, nếu bạn truy cập vào bất kỳ danh sách nội dung nào, nó sẽ truy cập vào máy chủ, tải xuống các câu chuyện, tạo NSMO và hiển thị. Trong nhật ký, tôi thấy configureCell được gọi một lần cho mỗi hàng hiển thị. Nếu tôi làm mới, tôi thấy như vậy. NHƯNG nếu tôi điều hướng đến một màn hình khác, sau đó quay trở lại, khi tôi kéo để làm mới, tôi nhận thấy rằng ô trống được gọi hai lần cho mỗi hàng. Nếu tôi tiếp tục quá trình rời đi và quay trở lại, mỗi khi tôi làm thế, việc khai thác gỗ được gọi là thêm thời gian. Đăng nhập một số phương thức ủy nhiệm của trình điều khiển kết quả được tìm nạp, tôi thấy willchangecontent trước mỗi tập hợp các cuộc gọi cellforrow. Ai đó có thể giúp tôi xác định lý do tại sao phương pháp cellforrow của tôi được gọi là một số lượng ngày càng tăng?

Một ý tưởng là cách tôi thiết lập FRC. Tôi theo mã như CoreDataBooks và di chuyển mọi thứ để xemdidload, nhưng vẫn thấy vấn đề.

tôi có một tài sản trong .h và trong .m có những gì tôi nghĩ là một thiết lập tiêu chuẩn:

- (NSFetchedResultsController *)fetchedResultsController 
{ 
//NSLog(@"fetchedresulscontroller"); 
if (_fetchedResultsController != nil) 
{ 
    return _fetchedResultsController; 
} 

// initialize fetch request. setup predicate, sort, etc. 

NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"date" cacheName:nil]; 

aFetchedResultsController.delegate = self; 
self.fetchedResultsController = aFetchedResultsController; 

// perform actual fetch. delegate methods take it from here 
NSError *fetchError = nil; 
if (![self.fetchedResultsController performFetch:&fetchError]) 
{ 
    // Replace this implementation with code to handle the error appropriately. 
    // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. 
    NSLog(@"Unresolved error %@, %@", fetchError, [fetchError userInfo]); 
    abort(); 
} 

return _fetchedResultsController; 
} 
+0

tôi nghi ngờ nó có thể có cái gì để làm với khi bạn chạy 'của bạn NSFetchedResultsController'? Phương pháp vòng đời nào của TVC? – andrewbuilder

+0

Vì vậy, bạn có một biến địa phương mà vẫn còn FRC trong bộ nhớ? Ngoài ra khi nào bạn thiết lập FRC - đó là - phần nào của mã của bạn thực hiện điều này? – andrewbuilder

+0

tôi có một tài sản và sau đó đặt FRC trong - (NSFetchedResultsController *) fetchedResultsController được đăng ở trên. cảm ơn! – skinsfan00atg

Trả lời

3

andrewbuilder đã đi đúng hướng. Tất cả đều phải làm với FRC, nhưng mẹo đó là thư viện SWReveal của bên thứ ba được sử dụng cho menu. Hóa ra, tôi đã tạo ra một VC mới mỗi lần (trước đó đã không được deallocated) và FRC đã xem xét tất cả các bộ điều khiển xem trực tiếp. Vì vậy, mỗi lần tôi khai thác một lựa chọn từ trình đơn, một lựa chọn khác được thêm vào và các cuộc gọi cấu hình được gọi cho điều đó.

Giải pháp là để nil ra các đại biểu FRC trong viewwilldisappear và đặt nó trong viewWillAppear

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