我用这个答案来转换NSSstring中的UIImage,
https://stackoverflow.com/a/11251478/3741799
编码
- (NSString *)encodeToBase64String:(UIImage *)image {
return [UIImagePNGRepresentation(image) base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
}
解码
- (UIImage *)decodeBase64ToImage:(NSString *)strEncodeData {
NSData *data = [[NSData alloc]initWithBase64EncodedString:strEncodeData options:NSDataBase64DecodingIgnoreUnknownCharacters];
return [UIImage imageWithData:data];
}
这里编码图像并将NSString放在NSObject类
中 self.newData.imageString = [self encodeToBase64String: image];
将新对象添加到tableView
- (Void) insertNewObject: (id) sender {
if (! self.objects) {
[self.objects addObject: self.newData.imageString];
[self.tableView reloadData];
}
[self.objects InsertObject: self.newData atIndex: 0];
NSIndexPath * indexPath = [NSIndexPath indexPathForRow: 0 inSection: 0];
[self.tableView insertRowsAtIndexPaths: @ [indexPath] withRowAnimation: UITableViewRowAnimationAutomatic];
}
然后在TableView中加载新对象!
- (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath {
static NSString * CellIdentifier = @ "Custom";
CustomCell * cell = (CustomCell *) [self.tableView dequeueReusableCellWithIdentifier: CellIdentifier forIndexPath: indexPath];
ObjectClass * object = [self.objects objectAtIndex: indexPath.row];
cell.imageView.image = [self decodeBase64ToImage: object.imageString];
return cell;
}
但是当我在单元格中加载图像时无法解码字符串,因为它具有空值,并且应用程序崩溃了!
*由于未捕获的异常'NSInvalidArgumentException'而终止应用,原因:'* - [_ NSPlaceholderData initWithBase64EncodedString:options:]:nil string argument'
我认为问题在于编码,但我自己无法解决!
我哪里错了?
感谢
问题更新
Zaph问题是对的,我试着更好地解释: 我有一个空表视图,用户为每一行添加一个图像和一个文本字符串。 所以我尝试使用这个指南官方Apple
在类XYZToDoItem中添加属性@property NSString * itemName;我可以轻松添加用户创建的文本字符串。 但是如何在这个类中添加图像呢? 所以我想将图像转换为字符串并添加属性@property NSString * imageString; 但是有些不对劲我无法做到! 你能建议一个更好的方法吗?
非常感谢您的支持和帮助!!
答案 0 :(得分:1)
条件
中的代码if (! self.objects) { // true for self.objects == nil
[self.objects addObject: self.newData.imageString];
[self.tableView reloadData];
}
仅在self.objects
为nil
时才会执行。因此self.tableView reloadData
在self.objects
不存在时被调用,这意味着
ObjectClass * object = [self.objects objectAtIndex: indexPath.row]; // object is nil
会将object
分配给nil
。
然后,对decodeBase64ToImage
的后续调用将失败,因为object.imageString
为nil
。