不久:如何確定如果id爲CFType或者在運行時不會查身份證isKindOfType CFType
我執行dynamic core data attributes和ExtendedManagedObject的willSave方法,我想檢查id的值是CFType將其存儲到plist文件。
如果我想保存到PList UIImage的,這不是免費電話與CF(apple docs)橋接,我得到一個錯誤:
2011-11-17 17:16:25.294 [490 :707]保存擴展數據時出錯:屬性列表對於格式無效(屬性列表不能包含'CFType'類型的對象)
我可以用某種方法檢查它嗎,或者我必須自己執行它(只是來自文檔的KindOfClass)?
我不想在NSManagedObject子類中實現訪問器,我不知道究竟會從實體屬性中獲取多少個url。問題是關於運行時的動態擴展屬性。
- (void)willSave
{
NSDictionary *changes = [self valueForKey:@"extendedChanges"];
if (changes!=nil) {
// merge changes into snapshot
NSMutableDictionary *dict = [[self extendedSnapshot] mutableCopy];
NSEnumerator *e = [changes keyEnumerator];
NSString *key;
while (key=[e nextObject]) {
id value = [changes objectForKey:key];
if (value==[NSNull null])
[dict removeObjectForKey:key];
else if (#ugly and I'm not shure is thread safe **else if ([value isKindOfClass:[NSArray class]] || [value isKindOfClass:[NSDictionary class]] || [value isKindOfClass:[NSDate class]] || [value isKindOfClass:[NSData class]] || [value isKindOfClass:[NSString class]] || [value isKindOfClass:[NSNumber class]])**)
[dict setObject:value forKey:key];
}
// archive as binary plist
NSData *data = nil;
if ([dict count]>0) {
NSString *error=nil;
data = [NSPropertyListSerialization dataFromPropertyList:dict
format:NSPropertyListBinaryFormat_v1_0 errorDescription:&error];
if (error!=nil) {
NSLog(@"Error saving extended data: %@", error);
[error release];
}
}
[dict release];
[self setPrimitiveValue:data forKey:@"extendedData"];
}
[super willSave];
}
謝謝你,但我想存儲指針的UIImage在運行時不添加屬性NSManagedObject子類,但只是通過 的UIImage * IMG = [[UIImage的imageWithData:loadeddata]保留]; dispatch_async(dispatch_get_main_queue(),^ { [prsn的setValue:pathToCachedFile forExtendedKey:@」 thumbnailPath「]; [cell.imageView setImage:img]; [prsn setValue:img forExtendedKey:@「thumbnailPointer」]; }); 我想跳過這種類型,同時保存到持久存儲 - (void)willSave方法。 – Renatus
看到我編輯的帖子。 – Yuji
>但我想在運行時存儲指向UIImage的指針而不向NSManagedObject子類添加屬性; 我也想存儲路徑到核心數據 [prsn setValue:pathToCachedFile forExtendedKey:@「thumbnailPath」]; 我只需要在運行時指向UIImage – Renatus