2011-09-15 21 views
17

Từ Core Data Programming Guide (tôi nhấn mạnh):Trình truy cập 'nguyên thủy' trong Dữ liệu chính là gì?

Theo mặc định, Core Data động tạo ra hiệu quả côngnguyên thủy get và thiết lập các phương pháp accessor đối với tài sản theo mô hình (các thuộc tính và các mối quan hệ) của các lớp đối tượng quản lý.

Mặc dù tôi đã sử dụng Core Data và mogenerator hạnh phúc kể từ khi tôi bắt đầu vào Objective-C, tôi chưa bao giờ có một cái nhìn vào những gì này có nghĩa là, cho đến khi một trình ứng dụng bị từ chối do bị cáo buộc sử dụng các API riêng . Câu chuyện dài về phương pháp setPrimitiveTypeValue: được tạo ra, nhưng không phải là câu hỏi của tôi.

Trong khi đọc hướng dẫn, tôi tình cờ gặp ý tưởng về những người truy cập công cộng và nguyên thủy cho thuộc tính thực thể. quote khác, nhưng tiếp tục xuống:

Ví dụ, với một thực thể với một thuộc tính firstName, Core Data sẽ tự động tạo firstName, setFirstName:, primitiveFirstName, và setPrimitiveFirstName:.

Trình truy cập nguyên thủy là gì? Là nó chỉ để bạn có thể gán một giá trị BOOL trực tiếp, mà không cần gói nó trong một NSNumber? Nếu vậy, tại sao mogenerator đã trải qua những rắc rối khi tạo ra tất cả các loại <Attribute>Value, set<Attribute>Value:, primitive<Attribute>Value, setPrimitive<Attribute>Value: người truy cập?

Tôi đang bối rối, ai có thể giúp tôi?


câu hỏi liên quan:

+0

Một người nào khác [đã trả lời câu hỏi này] [1] với câu trả lời hay. [1]: http://stackoverflow.com/questions/5509106/why-would-i-need-to-use-a-primitive-accessor-methods-in-a-core-data- dự án – Simon

Trả lời

10

Theo như tôi được biết, phương pháp nguyên thủy không thực tế nhận được và thiết lập , nhưng không phát hành bất kỳ thông báo KVC hoặc KVO nào ('willAccessValueForKey', v.v.). Phương thức công khai gọi phương thức nguyên thủy, nhưng kết thúc cuộc gọi trong các cuộc gọi KVO. Vì vậy, từ bên ngoài đối tượng, bạn thường gọi các phương thức công khai, nhưng nếu bạn cần sử dụng các thuộc tính của đối tượng vì lý do nội bộ (để xác nhận hoặc lấy được một số thuộc tính khác), bạn sẽ sử dụng các phương thức nguyên thủy để tránh bắn tất cả các thông báo.

tôi hoan nghênh bất kỳ điều chỉnh hoặc làm rõ về câu trả lời vì nó là một chủ đề mà tôi quan tâm nhưng không diễn tả đầy đủ trong.

+0

Câu trả lời thú vị @jrturton. Chỉ cần thêm liên kết này làm tài liệu tham khảo nếu mọi người muốn xem nhanh [Phương pháp Accessor nguyên thủy tùy chỉnh] (https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/Articles/cdAccessorMethods.html # // apple_ref/doc/uid/TP40002154-SW5) trong tài liệu Dữ liệu Chính để sao lưu câu trả lời của bạn. – Mick

+1

@Patt wow điều này phải có được một trong những câu trả lời SO đầu tiên của tôi! Vụ nổ từ quá khứ ... – jrturton

+0

@Mick liên kết đó hiện đã lỗi thời. – ThomasW

0

@ vấn đề câu trả lời phủ jrturton của về Tuỳ chỉnh Thuộc tínhTo-Một mối quan hệ Phương thức Accessor, nơi truy cập công khai đơn giản.

Ngoài ra, để hỗ trợ đầy đủ Quan hệ To-01 Trình tiếp cận, trong triển khai tùy chỉnh, truy cập công cộng có thể phải gọi truy nhập nguyên thủy kết hợp với phương pháp NSMutableSet (unionSet: và minusSet :), Cặp phương thức KVO (sẽ ... đã ...).

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