基于coreData信息在objective-c中以编程方式创建图像
Posted
技术标签:
【中文标题】基于coreData信息在objective-c中以编程方式创建图像【英文标题】:create image programmatically in objective-c based on coreData info 【发布时间】:2013-03-07 16:56:22 【问题描述】:我的 ViewController 中有一个表,在这个表中我会从 webService 和 CoreData 中获取一些信息,这些信息来自每一行,当我在每一行中按下时,我想去详细视图并创建图像,
我有卡片,每张卡片上都有不同的印章,当我要查看详细信息时,我想创建这些图像,我的意思是如果我的卡有 2 个印章我想创建 2 个图像,如果我想创建 3 个印章创建 3 张图片,
你能帮我完成这个实现吗? 提前致谢!
这是我从网络服务获得的信息:
createdAt = 1362412409;
id = 2;
stampNumber = 2;
,
createdAt = 1362069567;
id = 1;
stampNumber = 10;
这是我的代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath
*)indexPath
static NSString *CellIdentifier = @"CardsCell";
CardCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
NSArray *objects = [[NSBundle mainBundle] loadNibNamed:@"CardCell" owner:nil
options:nil];
for (id currentObject in objects)
if([currentObject isKindOfClass:[UITableViewCell class]])
cell = (CardCell *) currentObject;
break;
card = self.cards[indexPath.row];
cell.stampId.text = [[NSString alloc] initWithFormat:@"%@",card.stampNumber];
cell.createdAt.text = [[NSString alloc] initWithFormat:@"%@",card.createdAt];
cell.CardId.text = [[NSString alloc] initWithFormat:@"Carte %d",(indexPath.row+1)];
return cell;
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath
*)indexPath
[tableView deselectRowAtIndexPath:indexPath animated:YES];
[[NSNotificationCenter defaultCenter] postNotificationName:@"cardDetail" object:nil
userInfo:nil];
我的问题是我应该如何根据我的图章以编程方式创建这些图片..
编辑: 我有这张图片:
UIImageView *stampIMG = [[UIImageView alloc] initWithFrame:self.view.frame];
stampIMG = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"1.jpg"]];
stampIMG.frame = CGRectMake(0, 0, 122, 122);
我只想用这张图片
【问题讨论】:
我很困惑。这个图像应该是什么样子的?什么是“邮票”?我所看到的只是一个“stampId”,它似乎是一个数字。您打算如何从数字创建图像? @maddy 我将根据该数字创建图像 根据号码如何?图片内容从何而来?还是您只是想要数字的图像? @rmaddy 检查我的编辑 好的,你已经有了图片。您实际上并不想在运行时创建图像。正确的?您的问题实际上是关于如何根据邮票 id 引用现有图像?为此,您可以执行[UIImage imageNamed:[NSString stringWithFormat:@"%@.jpg", stampId]];
之类的操作。更新格式说明符以匹配 stampId
的类型。
【参考方案1】:
您应该存储图像位置的路径,而不是图像的 NSData。然后使用 stampId 获取该图像路径并加载到您的图像中。如果图像在服务器上,则下载图像。您可以将图像作为 NSData 存储在 CoreData 中,但是这个 blob 可能很大,这就是为什么通常最好只存储图像的路径。因此,在 CoreData 中,您可以拥有一个具有 stampId 和 ImagePath 的对象 Stamp。然后通过stampId获取对象,然后从对象中取出imagePath。
我可能会尝试这样的方法来通过戳 id 获取图像。如果您的图片已下载,请替换文档目录与主包。
NSFetchRequest * stampById = [[NSFetchRequest alloc] init];
[stampById setEntity:[NSEntityDescription entityForName:@"Card" inManagedObjectContext:self.managedObjectContextBKG]];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"stampId == %@", stampId];
[stampById setPredicate:predicate];
NSError *error = nil;
NSArray * stampResults = [self.managedObjectContext executeFetchRequest:stampById error:&error];
if(nil != stampResults && [stampResults count])
Stamp *stamp = [stampResults objectAtIndex:0];
UIImage *image = [[UIImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource: stamp.imagePath ofType:@"png"]];
【讨论】:
更新了我的答案以显示基本思想。再一次,如果您使用的是 coreData。如果没有更简单的方法,如stringWithFormat
谢谢,这样:如果我有 2 个印章,我可以有 2 个图像吗? (图像存储在我的本地,它只是一张图像)当我的邮票 ID 增加时,我希望拥有相同数量的图像以上是关于基于coreData信息在objective-c中以编程方式创建图像的主要内容,如果未能解决你的问题,请参考以下文章
Objective-C/iOS:如何从 CoreData 中的属性中删除“值”?
IOS/Objective-C:无法将 CoreData 值保存到 NSArray
如何在objective-c的coredata应用程序中添加我的TwitterClient.sqlite中的数据