之前寫了《Core Data淺談系列匯總》,今天稍微回顧了下,做些補充。
在這個系列的第一篇《基礎結構》中(2013年1月份的文章,時間過得好快啊!),有簡單帶過Entity的Attribute:
數據類型、布爾值統一用NSNumber來表示;字符串類型用NSString表示;時間類型用NSDate表示;二進制數據類型用NSData表示;非標准類型用Transformable來表示;而Attribute還有其自身的Properties,比如Transient表示不用持久化到磁盤,Optional表示非必填字段(如果必填字段為空保存時會出錯),Indexed則表示索引字段。
這裡主要討論下Binary Data和Transformable兩種。
以存儲UIImage為例,如果使用Binary Data類型來存儲,那麼字段設為對應類型:
@property (nonatomic, retain) NSData * image;
UIKIT_EXTERN NSData *UIImagePNGRepresentation(UIImage *image);的函數進行轉換,不過如果對於其它類型,尤其是自定義的類型來說,每次都要如此操作則顯得很麻煩,使用Transformable類型可以通過NSValueTransformer及其擴展來優化這個步驟:
#import@interface UIImageTransformer : NSValueTransformer @end
有了這麼個Transformer,可以在面板裡面進行指定,但在其可以順利工作之前需要提供幾個方法:
<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD48cHJlIGNsYXNzPQ=="brush:java;">+ (BOOL)allowsReverseTransformation {
return YES;
}
表示可以雙向轉換,寫進去和讀出來都是通的。
+ (Class)transformedValueClass { return [NSData class]; }
- (id)reverseTransformedValue:(id)value { // } - (id)transformedValue:(id)value { // }
表示實際的轉換方法。
但是說到使用Core Data存儲UIImage這個話題,這裡有更進一步的討論:
http://stackoverflow.com/questions/4158286/storing-images-in-core-data-or-as-file
http://stackoverflow.com/questions/16685812/how-to-store-an-image-in-core-data
而關於上面討論的內容,也有一些相關鏈接:
http://stackoverflow.com/questions/14256762/what-is-the-difference-between-transformable-and-binary-data
http://stackoverflow.com/questions/6783091/when-not-to-use-core-data-type-transformable
http://stackoverflow.com/questions/1562676/best-practice-array-dictionary-as-a-core-data-entity-attribute
http://stackoverflow.com/questions/3014498/what-can-i-do-with-an-transformable-attribute-type-in-core-data-on-the-iphone