閱讀649 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Core Data淺談係列之十 : 關於數據模型中實體的屬性

之前寫了《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;

在賦值之前需要將UIImage先轉為NSData類型。這一步對於UIImage類型來說可能比較方便,可以直接調用類似
UIKIT_EXTERN NSData *UIImagePNGRepresentation(UIImage *image);
的函數進行轉換,不過如果對於其它類型,尤其是自定義的類型來說,每次都要如此操作則顯得很麻煩,使用Transformable類型可以通過NSValueTransformer及其擴展來優化這個步驟:

#import <Foundation/Foundation.h>

@interface UIImageTransformer : NSValueTransformer

@end

如果是自定義Person結構,可能就叫做DIYPersonTransformer。


有了這麼個Transformer,可以在麵板裏麵進行指定,但在其可以順利工作之前需要提供幾個方法:

+ (BOOL)allowsReverseTransformation {
    return YES;
}

表示可以雙向轉換,寫進去和讀出來都是通的。

+ (Class)transformedValueClass { 
    return [NSData class];
}

表示實際存儲的類型。

- (id)reverseTransformedValue:(id)value
{
    //
}

- (id)transformedValue:(id)value
{
    // 
}

表示實際的轉換方法。

但是說到使用Core Data存儲UIImage這個話題,這裏有更進一步的討論:

https://stackoverflow.com/questions/4158286/storing-images-in-core-data-or-as-file

https://stackoverflow.com/questions/16685812/how-to-store-an-image-in-core-data

而關於上麵討論的內容,也有一些相關鏈接:

https://stackoverflow.com/questions/14256762/what-is-the-difference-between-transformable-and-binary-data

https://stackoverflow.com/questions/6783091/when-not-to-use-core-data-type-transformable

https://stackoverflow.com/questions/1562676/best-practice-array-dictionary-as-a-core-data-entity-attribute

https://stackoverflow.com/questions/3014498/what-can-i-do-with-an-transformable-attribute-type-in-core-data-on-the-iphone


Brief Talk About Core Data Series, Part 10 : About NSEntityDescription's Attributes

Jason Lee @ Hangzhou
Blog : https://blog.csdn.net/jasonblog
Weibo : https://weibo.com/jasonmblog


最後更新:2017-04-03 07:56:55

  上一篇:go NYOJ90-整數劃分
  下一篇:go 流程控製語句