0
我試圖在我自己的NSCoding
符合Class保存一個UIImage來自ABRecordRef
。至於我現在我可以說,這UIImage
不是NSCoding
符合,所以我嘗試了下面的變通使用NSData
代替:一旦通過NSCoding保存UIImage文件通過將它們轉換爲NSData
- (id)initWithRecordRef:(ABRecordRef)record{
//Getting the image
if (ABPersonHasImageData(record)){
CFDataRef imageData = ABPersonCopyImageData(record);
image = [UIImage imageWithData:(NSData *) imageData];
CFRelease(imageData);
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)aCoder{
//encode NSData representation from UIImage
tempData = UIImagePNGRepresentation(image);
[aCoder encodeObject:tempData forKey:@"image"];
}
- (id)initWithCoder:(NSCoder *)aDecoder{
//image
tempData = [aDecoder decodeObjectForKey:@"image"];
image= [UIImage imageWithData:[tempData valueForKey:@"image"]];
[tempData release];
return self;
}
出於某種原因,在PROGRAMM崩潰,因爲我嘗試保存這個類的一個實例。 我做錯了什麼,或者更好:我如何完成我想要的?謝謝!
首先,沒有必要釋放,所以你在那裏正確的地方。不幸的是,這並沒有解決問題。 我試了多次,它似乎,錯誤是在這個聲明: 'image = [UIImage imageWithData:[tempData valueForKey:@「image」]];' 當我看着它,我undersood,那'valueForKey'部分是不理智的。 這部分現在工作,但現在我得到了sigarbit,如果我嘗試tu從加載的數據分配圖像到imageview ... 保存在NSCoding中的圖像,甚至這樣的工作?我究竟做錯了什麼? –
發現'valueForKey:'部分是很好的。不幸的是,我忽略了這一點。你如何將圖像分配給imageView?這純粹是一種猜測,但它聽起來像是在將圖像分配給imageView之前正在釋放圖像。 – justin
首先我加載我的類'RealRecord'的已保存實例,然後將圖像分配給名爲'avatarView'的UIImageview,如下所示:' - (IBAction)loadSavedContact RealRecord * myRecord = [NSKeyedUnarchiver unarchiveObjectWithFile:[self saveFilePath ]]; (myRecord == nil){NSLog(@「loading failed」); } avatarView.image = myRecord.image; // SIGARBIT發生在這裏 }對於非結構化代碼感到抱歉;不知道如何更好地發表評論。 –