ios - tutorial - swift儲存資料




為什麼Core Data託管對像中的NSDate轉換為NSTimeInterval? (2)

我有一個對象,其屬性具有在我的xcdatamodeld對像中定義的Date類型。 為什麼它使用NSTimeInterval生成NSManagedObject類? 我如何在其上設置NSDate然後讓NSDate退出呢?


如果您希望混合實體同時使用標量和非標量屬性表示,例如int32_t用於整數或布爾屬性,而NSDate*用於日期屬性,則需要手動編輯生成的託管對象.h文件。

因此,我通常首先創建託管對像類,方法是選中“ 使用標量屬性”作為基本數據類型 (因為我有比日期更多的整數和布爾屬性)。 然後我編輯創建的頭文件,如下所示:

MYEntity.h

@interface MYEntity : NSManagedObject
@property (nonatomic) int32_t index;
@property (nonatomic) NSTimeInterval date;
@end

然後成為:

@interface MYEntity : NSManagedObject
@property (nonatomic) int32_t index;
@property (nonatomic, retain) NSDate * date;
@end

如果您不喜歡手動編輯此文件,您還可以選擇使用允許訪問標量屬性的類別添加便利屬性,就像它將是一個對像一樣。

myEntity所+ Convenience.h:

@interface MYEntity (Convenience)
@property (nonatomic, readwrite) NSDate *theDate
@end

myEntity所+ Convenience.h:

@implementation MYEntity (Convenience)

- (NSDate *)theDate {
    return [NSDate dateWithTimeIntervalSinceReferenceDate:self.date];
}

- (void)setTheDate:(NSDate *)theDate {
    self.date = [theDate timeIntervalSinceReferenceDate]
}

@end

為了使代碼在此示例中更具可讀性,我將在數據模型設計器中命名原始屬性dateTimeInterval ,並使用其所需名稱命名為便捷屬性: date

第二種方法顯然也適用。 您可以使用非標量屬性導出實體,然後提供方便的標量屬性,其getter和setter訪問原始的非標量屬性。


如果我在生成文件時選中“使用原始數據類型的標量屬性”複選框,我會得到這個。

這是因為NSTimeInterval是偽裝的雙重,而NSDate是一個繼承自NSObject的類。





core-data