2

我有一个 iOS 应用程序,我正在尝试将其核心数据模型迁移到新版本。

在 Core Data 模型的 v2 中有一个新字段(photoFilename),可以使用 v1 字段(dateInSeconds)并附加“.jpg”为现有条目生成它的值。

例如

version 1                               | version 2
field          data                     | field          data
========================================|==============================
dateInSeconds (Integer 32)  401760341   | dateInSeconds (Integer 32)  401760341
                                        | photoFilename (String)  401760341.jpg 

我已经创建了一个核心数据映射模型(部分如下所示),并且数据库似乎要迁移。不幸的是,创建的 photoFilename 在“.jpg”前面没有给出正确的数字。例如,它可能返回 '275263312.jpg' 而不是 '401760341.jpg'

在此处输入图像描述

现在诚然,我以前从未使用过这样的映射,而且这里的 Apple 文档似乎非常有限。

在其他地方进行研究,似乎“值表达式”是 NSExpression 的一种,可以复制用于测试目的。

NSExpression *expr = [NSExpression expressionWithFormat:@"FUNCTION('', 'stringByAppendingFormat:', '%d.jpg', 401760341)"];
id result = [expr expressionValueWithObject:nil context:nil];
NSLog(@"result: %@", result);

但是,这与“.jpg”前面的错误数字类似。

有人可以指出为什么获得的评估结果不是我的预期结果吗?

4

2 回答 2

0

此链接中描述的解决方案对我来说效果很好。

http://www.cocoabuilder.com/archive/cocoa/197476-custom-entity-migration-policies-atribute-from-nsstring-to-nsdate.html

简而言之,它说您可以在项目(例如实用程序类)中的任何类(类方法,而不是实例)上编写函数,并使用 FUNCTION 表达式调用该方法(有关语法的详细信息,请参见链接)。这允许您编写相当复杂的代码来更改实体上的特定属性,而无需为整个实体编写整个实体迁移策略。

于 2015-01-27T15:32:20.763 回答
0

我仍然不确定我的问题的确切原因,但是通过转换为 NSString 在我的映射模型中遇到了以下工作

在此处输入图像描述

或者对于那些跟随使用 NSExpression 的人

NSExpression *expr = [NSExpression expressionWithFormat:@"FUNCTION('', 'stringByAppendingFormat:', '%@.jpg', CAST(401760341, 'NSString') )"];
id result = [expr expressionValueWithObject:nil context:nil];
NSLog(@"result: %@", result);
于 2013-09-24T16:20:19.337 回答