2013-09-24 40 views
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'前面沒有給出正確的數字。例如,與蘋果的文檔here似乎非常有限纔可能返回而不是「401760341.jpg」 275263312.jpg「

enter image description here

現在承認,我從來沒有用過這樣的映射。

在其他地方的研究看來,'價值表達'是一種NSExpression,可以複製用於測試目的。

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

但是,這種評估方式與'.jpg'前面的不正確數字類似。

有人能指出爲什麼獲得的評估結果不是我的預期結果嗎?

回答

0

我仍然不知道我的問題的確切原因,但鑄造橫跨了以下工作在我的映射模型周圍傳來一個NSString

enter image description here

或對於那些你一起使用以下NSExpression

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

此鏈接中描述的解決方案對我來說工作得很好。

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

簡單地說,它說,你可以寫在你的項目上任何類的函數(一個類的方法,而不是實例)(說公用事業類),並通過使用函數表達式調用該方法(見語法上特定的鏈接)。這使您可以編寫相當複雜的代碼來更改實體上的特定屬性,而無需爲整個實體編寫整個實體遷移策略。