0

我在一个包含核心数据的应用程序项目中,我严格使用 KVC 仅针对NSManagedObjects. 因此这样做的目的只是为了了解优点和缺点。我可能发现了一个缺点。但是,我无法解释为什么。

当我使用一些非常成熟的原则(已经在其他应用程序中使用过)保存用户用手指在核心数据中绘制的草图(文档的签名)并分别获取并显示或打印到 PDF 时,我遇到了这个问题稍后。

事实证明,我能够UIImage从视图中获取,将其存储在核心数据中,并使用 KVC 再次从核心数据中立即接收它(中间没有保存/获取),并将其显示在另一个视图中以用于测试目的。但我无法实际保存它,从持久存储中获取数据并将其重新显示在屏幕上。所以我做了很多调试,分析了 sqlite 文件等。最终我把它归结为以下奇怪的行为:

情况:图像通过以下方式成功存储到核心数据中:

[self.detailItem setValue:UIImagePNGRepresentation(image) forKey:kSignatureImage];

image一个UIImage对象并且self.detailItemNSManagedOBject. 钥匙和参考资料,一切都很好。

然后再次显示视图。以下内容与上下文是否保存在两者之间,甚至应用程序是否关闭并重新启动无关:

self.signatureCanvas.image = [UIImage imageWithData:[self.detailTextLabel valueForKey:kSignatureImage]];

self.signatureCanvas作为一个子UIImageView类对象。图像未显示在屏幕上。

NSData *data = [self.detailItem valueForKey:kSignatureImage];

NSLog(@"UIImage   a: %@", [UIImage imageWithData:[self.detailTextLabel valueForKey:kSignatureImage]]);
NSLog(@"UIImage   b: %@", [UIImage imageWithData:data]);

self.testImage.image =  [UIImage imageWithData:[self.detailTextLabel valueForKey:kSignatureImage]];

self.signatureCanvas.image = [UIImage imageWithData:data];

self.testImage是具有相同视图(但更小)的第二个普通 UIImageView。现在图像在 中可见,signatureCanvas但在 中不可见testImage。(反之亦然,试过了)

输出提示了正在发生的事情,但没有实际解释:

2013-03-22 12:43:37.746 MyApp[1595:c07] UIImage   a: (null)
2013-03-22 12:43:37.769 MyApp[1595:c07] UIImage   b: <UIImage: 0x7c973a0>

到目前为止,我一直认为代码行是等价的,编译器甚至可以优化数据对象。但是为什么图像(null)在一种情况下而不是在另一种情况下。

所以我找到了问题的根本原因和解决方法。因此,这不再紧急。但我不明白。有什么线索吗?

环境是:SDK 6.1,xcode 4.6,ARC,sqlite 上的核心数据,iPad 到目前为止。所有这些都发生在 UITableViewCell 子类(情节提要中的原型单元)中,自然而然地发生在 UITableViewController 子类中。

4

1 回答 1

0

我假设self.detailTextLabel

self.testImage.image =  [UIImage imageWithData:[self.detailTextLabel valueForKey:kSignatureImage]];

应该是self.detailItem

于 2013-03-22T12:55:48.557 回答