gpt4 book ai didi

ios - 使用 Core Data 持久保存 TableView Cell 图像

转载 作者:行者123 更新时间:2023-11-29 04:26:23 25 4
gpt4 key购买 nike

我正在尝试一款带有表格 View 的应用程序,其中包含个人资料名称和人物图像。表格 View 是可编辑的,可以添加新的名称和图片、删除现有表格并重新排列表格。表格 View 及其更改应该使用核心数据保存..我几乎完成了它,但核心数据部分有一些问题..

我已经实现了核心数据来为表格单元格提供数据持久性。每次重新启动应用程序时,表格单元格都会保留上次所做的更改。但是单元格图像不会加载。如何使该图像持久存在?

NSManagedObject *person1 = [NSEntityDescription
insertNewObjectForEntityForName:@"Person"
inManagedObjectContext:context];
NSManagedObject *person2 = [NSEntityDescription
insertNewObjectForEntityForName:@"Person"
inManagedObjectContext:context];

[person1 setValue:@"Bruce" forKey:@"personName"];
UIImage *image1 = [UIImage imageNamed:@"image1.jpg"];
NSData *imageData1 = UIImageJPEGRepresentation(image1, 0.9);
[person1 setValue:imageData1 forKey:@"personPicture"];
NSLog(@"Image1 data %@",imageData1);

[person2 setValue:@"Alfred" forKey:@"personName"];
UIImage *image2 = [UIImage imageNamed:@"image2.jpg"];
NSData *imageData2 = UIImageJPEGRepresentation(image2, 0.9);
[person2 setValue:imageData2 forKey:@"personPicture"];

NSError *error;
if (![context save:&error]) {
NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
}

然后获取完成为

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"Person" inManagedObjectContext:context];

[fetchRequest setEntity:entity];
NSError *error1 = nil;
self.persons = [[context executeFetchRequest:fetchRequest error:&error1] mutableCopy];

这一切是在 appDelegate 中的 didFinishLaunchingWithOptions 中完成的。然后,数据在 tableview 类实现文件中的 cellForRowAtIndexPath 方法中使用,如下所示

Person *thisPerson = [persons objectAtIndex:indexPath.row];
cell.textLabel.text = thisPerson.personName;

UIImage *image = [UIImage imageWithData:[thisPerson valueForKey:@"personPicture"]];
if ( image == nil ) {
image = [UIImage imageNamed:@"QuestionMark.jpg"];
}
cell.imageView.image = image;

单元格正在正确加载..我所做的所有编辑部分也正在保存和重新加载..第一次加载应用程序时图像加载正确..重新启动时会出现 QuestionMark.jpg 图像。 .这是因为图像为零..我尝试 NSLog 显示第一个图像数据并得到了这个:

2012-09-07 17:05:59.395 Sample Project[1688:fb03] Image1 data <ffd8ffe0 00104a46     
49460001 01000001 00010000 ffe10058 45786966 00004d4d 002a0000 00080002 01120003
00000001 00010000 87690004 00000001 00000026 00000000 0003a001 00030000 00010001
0000a002 00040000 00010000 00bea003 00040000 00010000 01090000 .........
...... .............. 7ff4d668 0356803f 357e307f c94ff14f fd858ffe
9af4ba00 f39a00cf a00d0a00 cfa00280 0a002803 ffd9>

还有很多地方我添加了点..无论如何..这似乎表明它保存了数据..

最佳答案

如果图像比较小,则将其保存为核心数据存储库中的 NSData 对象。我对缩略图等执行此操作。对于大图像,您可以保存 URL 并将图像放入文档文件夹中,并将文件的 URL (NSURL) 保存为 Core Data 中的对象。如果您删除该核心数据实体,则它必须删除该文件。

编辑:关于问题中的“抱歉...”评论,更改此行:

UIImage *image = [UIImage imageWithData:[thisPerson valueForKey:@"personPicture"]];

NSData *data = thisPerson.personPicture;
if(data) {
NSLog(@"Image class: %@", NSStringFromClass[data class]);
if([data isKindOfClass:[NSData data]]) {
NSLog(@"Data was of size %u", [data length]);
UIImage *image = [UIImage imageWithData:data];
if(image) NSLOg(@"SUCCESS!");
else NSLog(@"PROBLEM: cannot create image from data");
}
} else {
NSLog(@"BIG PROBEM - personPicture is nil");
}

您将从此处的输出中学到很多东西。

关于ios - 使用 Core Data 持久保存 TableView Cell 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12281669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com