2010-05-11 26 views
5

Tôi đang cố gắng để biết Core Data (Tôi là một Noob phát triển iPhone) và để làm điều này tôi đang cố gắng để có được một đối tượng từ fetchedresultscontroller và NSlog tên của nó (một tài sản của đối tượng) . Tôi cố gắng để làm điều đó như thế này:Dữ liệu cốt lõi được tìm nạp trước câu hỏi về bộ điều khiển: "phần" là gì?

NSArray *ar = [NSArray arrayWithArray:[fetchedResultsController sections]]; 
Task *t = [ar objectAtIndex:0]; 
NSLog(@"%@", t.taskName); 

Tuy nhiên, các ứng dụng bị rơi với lỗi này: treo ứng dụng với lỗi

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[_NSDefaultSectionInfo taskName]: unrecognized selector sent to instance 0x3d1f670'

Tôi đã kể từ khi biết rằng bạn cần phải sử dụng lấy các đối tượng sở hữu cho điều này, nhưng sau đó phần là gì? Cảm ơn bạn đã giúp đỡ, xin lỗi nếu đây là một câu hỏi vô cùng ngu ngốc. Tôi đã xem qua tài liệu nhưng vẫn không hiểu.

Trả lời

27

NSFetchedResultsController có thể nhóm các đối tượng của bạn thành các phần dựa trên khóa bạn chỉ định. Vì vậy, ví dụ: nếu pháp nhân của bạn có thuộc tính category, bạn có thể nhóm đối tượng của mình theo category và hiển thị chúng dưới tiêu đề cho danh mục đó.

Mỗi UITableView (và mỗi NSFetchedResultsController) chứa ít nhất một phần, vì vậy ngay cả khi bạn không sử dụng chức năng này, bạn vẫn phải xử lý các phần. Nếu bạn check the documentation, bạn sẽ thấy rằng các đối tượng trong thuộc tính sections tuân theo giao thức NSFetchedResultsSectionInfo, có thuộc tính objects chứa các đối tượng trong phần đó.

Có hai cách để có được một đối tượng thực tế ra khỏi một NSFetchedResultsController:

id <NSFetchedResultsSectionInfo> sectionInfo = [fetchedResultsController.sections objectAtIndex:0]; 
Task *task = [sectionInfo.objects objectAtIndex:0]; 

Một cách khác, đơn giản hơn nhiều, và ưa thích là sử dụng phương pháp objectAtIndexPath:.

Task *task = [fetchedResultsController objectAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]]; 

Hai mẫu này tương đương nhau. UIKit adds some methods to NSIndexPath để làm việc với chế độ xem bảng và bộ điều khiển kết quả được tìm nạp dễ dàng hơn. Ngoài ra, hãy lưu ý rằng các phương thức UITableViewDataSourceUITableViewDelegate đều cung cấp cho bạn các đối tượng NSIndexPath, vì vậy, bạn thường có thể chuyển các đối tượng này đến objectAtIndexPath: để nhận đối tượng chính xác cho ô đó.

Apple cũng cung cấp decent tutorial về cách sử dụng Dữ liệu cốt lõi trên iPhone. Nó sẽ trả lời rất nhiều câu hỏi của bạn. Thật không may, nó không bao gồm chiều sâu NSFetchedResultsController.

+1

Wow, cảm ơn bạn rất nhiều, đây là thông tin tuyệt vời. – Jake

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