2012-02-20 31 views
6

Tôi đang tạo một UITableView với một số dữ liệu tổng hợp. Trên đường đi, các Tiêu đề Mục cần được sử dụng để phân loại và nhóm các ô xem bảng.Dữ liệu cốt lõi - sử dụng các thuộc tính tạm thời trong nhóm theo

Vấn đề là tôi muốn sử dụng Thuộc tính tạm thời trong NSFetchRequest để tạo các tiêu đề mục & các loại kết quả. Vấn đề là trong khi thiết lập NSFetchRequest tôi nhận được một '' NSInvalidArgumentException ', lý do:' Keypath player.fullName không hợp lệ được truyền cho setPropertiesToFetch '.

Thực thể chính cho NSFetchRequest là đối tượng Trình phát với thuộc tính: firstName & lastName. Để sắp xếp và nhóm dữ liệu một thuộc tính tạm thời 'fullName' đã được giới thiệu. Đây là một phép nối đơn giản của các thuộc tính lastName và firstName.

Những điều cố gắng cho đến nay là:

a) Xác định - (NSString *) FullName phương pháp

b) Xác định một @property (nonatomic, chỉ đọc) NSString * Họ & Tên

c) Thêm a @dynamic fullName

d) Thêm thuộc tính fullName vào thực thể Trình phát & làm cho nó thoáng qua.

Hiện có bất kỳ ý tưởng nào hoặc có ngay bây giờ để chọn thuộc tính tạm thời trong NSFetchRequest bao gồm một nhóm theo mệnh đề hay không.

Bất kỳ trợ giúp nào được đánh giá cao.

Trả lời

2

Bạn không thể liên quan đến các thuộc tính tạm thời trong yêu cầu tìm nạp của mình, nhưng bạn có thể sử dụng chúng cho đường dẫn khóa tên phần, miễn là chúng xuất hiện theo cùng một thứ tự.

Hãy thử sắp xếp yêu cầu tìm nạp của bạn trên lastName và firstName (hai mô tả phân loại riêng biệt, trong một mảng), sau đó sử dụng player.fullName làm đường dẫn khóa tên phần khi tạo bộ điều khiển kết quả tìm nạp (chỉ a và b từ danh sách của bạn ở trên).

+0

Đề xuất tuyệt vời. Đã thử nó và đã bao giờ rất gần. Vẫn nhận được một ngoại lệ KVO cho fullName nhưng tôi tin rằng điều này là do tôi sử dụng một NSDictionaryResultType không phải là một kết quả thực thể tiêu chuẩn. Nhưng chắc chắn đã cho tôi một con đường mới để đi theo. – user1220717

3

Cuối cùng, có vẻ như bao gồm một thuộc tính tạm thời trong một nhóm bởi NSFetchResults với Group By là không thể.

Đề xuất tuyệt vời của jrturton đã kết thúc. Cuối cùng, thuộc tính tạm thời fullName đủ dễ tạo ra khi cập nhật thực thể và chỉ cập nhật rất thường xuyên để giải pháp ngừng sử dụng thuộc tính tạm thời và tạo một thuộc tính hoàn toàn chính thức. Hãy nghĩ về nó như là sự biến đổi cực đoan.

giải pháp là để thiết lập như sau

-(void)setLastName:(NSString*)aName 
{ 
    [self willChangeValueForKey: @"lastName" ]; 
    [self setPrimitiveValue: aName forKey: @"lastName" ]; 
    [self updateFullName]; 
    [self didChangeValueForKey: @"lastName" ]; 
} 

-(void)setFirstName:(NSString*)aName 
{ 
    [self willChangeValueForKey: @"firstName" ]; 
    [self setPrimitiveValue: aName forKey: @"firstName"];  
    [self updateFullName]; 
    [self didChangeValueForKey: @"firstName" ]; 
} 

này cập nhật các FullName như một thuộc tính của đối tượng Player và loại bỏ các vấn đề của tôi. Hy vọng nó giúp.

+0

Bạn không viết đúng đối tượng được quản lý của mình - xem https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdAccessorMethods.html - bạn phải đăng thông báo KVO. – jrturton

+0

Bạn nói đúng. Tôi đã cập nhật chúng ở trên. Tôi nghĩ rằng tôi đã quá háo hức sau khi tôi đã làm việc xung quanh vấn đề của tôi. – user1220717

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