चूंकि कोर डेटा में unsigned long long
के लिए कोई समर्थन नहीं है, इसलिए आपको सचमुच "चाल" करना पड़ सकता है।
// header
@interface Event : NSManagedObject
@property (nonatomic, retain) NSData * timestamp;
- (void)setTimestampWithUInt64:(uint64_t)timestamp;
- (uint64_t)timestampUInt64;
@end
// implementation
@implementation Event
@dynamic timestamp;
- (void)setTimestampWithUInt64:(uint64_t)timestamp
{
self.timestamp = [NSData dataWithBytes:×tamp length:sizeof(timestamp)];
}
- (uint64_t)timestampUInt64
{
uint64_t timestamp;
[self.timestamp getBytes:×tamp length:sizeof(timestamp)];
return timestamp;
}
@end
यह काम करने के लिए लगता है:
एक विचार यह है के रूप में ... बाइनरी डेटा मान संग्रहीत है, और उस uint64_t
के रूप में डेटा वापस कस्टम accessors परिभाषित करने के लिए है। नीचे दिए गए कोड:
Event *event = [NSEntityDescription insertNewObjectForEntityForName:@"Event"
inManagedObjectContext:self.managedObjectContext];
uint64_t timestamp = 119143881477165;
NSLog(@"timestamp: %llu", timestamp);
[event setTimestampWithUInt64:timestamp];
[self.managedObjectContext save:nil];
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Event"];
Event *retrievedEvent = [[self.managedObjectContext executeFetchRequest:request
error:nil] lastObject];
NSLog(@"timestamp: %llu", [retrievedEvent timestampUInt64]);
आउटपुट:
2012-03-03 15:49:13.792 ulonglong[9672:207] timestamp: 119143881477165
2012-03-03 15:49:13.806 ulonglong[9672:207] timestamp: 119143881477165
एक निश्चित रूप से इस तरह हैक अविवेक का एक स्तर कहते हैं, और यह प्रदर्शन जब timestamp
भारी प्रयोग किया जाता है को प्रभावित कर सकता।
धन्यवाद समय देने के लिए इस विस्तार जवाब है, @ayoy प्रस्तुत करने के लिए के लिए बहुत ज्यादा। एनएसडाटा एक विकल्प था जिसे मैंने माना था, लेकिन मुझे यह जानकर आश्चर्य हुआ कि बॉक्स के बाहर कोर डेटा द्वारा हस्ताक्षरित लंबे समय तक मूल्य समर्थित नहीं हैं। वैसे भी, आपका समाधान पूरी तरह से ठीक काम करता है। –