我正在對兩個列表進行簡單比較,以查看「評估」列表中的哪些項目包含在較大的「目標」列表中。我通過解析兩個CSV文件並將所有內容存儲爲字符串,即時獲取數據。我成功地將數據導入到數據存儲中,並且我可以獲得實體列表沒有問題核心數據是否在後臺執行自己的類型轉換?
問題出現在我實際執行搜索時。基本上,我正在從目標列表中的評估列表中尋找1234
形式的短ISBN,格式爲1234-5
。我使用的謂詞是我正在使用的[NSString stringWithFormat:@"%@ CONTAINS %@", kOC_Target_PrintBookCode, evalIsbn]
我得到的錯誤形式CONTAINS
比較如下(以抓住我的NSLog
)
NSInvalidArgumentException: Can't look for value (1494) in string (49885); value is not a string
我得到的印象是,即使ISBN正在從NSString中讀取,並且Core Data存儲將數據點指定爲字符串,但Core Data仍然在後臺執行任何與其認爲合適的值有關的值。有任何想法嗎?
這裏是相關的過程邏輯(儘管我可疑地使用這個術語)代碼。除非在代碼另有說明,所有的值被操縱和/或存儲是NSString
:
NSArray *evalBooks = [self getEntitiesByName:kOC_EntityName_EvalBook
usingPredicateValue:[NSString stringWithFormat:@"%@ > \"\"", kOC_Eval_Bookcode]
withSubstitutionVariables:nil
inModel:[self managedObjectModel]
andContext:[self managedObjectContext]
sortByAttribute:nil];
if ((!evalBooks) || ([evalBooks count] == 0)) {
// we have problem
NSLog(@"(!evalBooks) || ([evalBooks count] == 0)");
return;
}
[evalBooks retain];
int firstEvalBook = 0;
int thisEvalBook = firstEvalBook;
int lastEvalBook = [evalBooks count]; NSLog(@"lastEvalBook: %i", lastEvalBook);
for (thisEvalBook = firstEvalBook; thisEvalBook < lastEvalBook; thisEvalBook++) {
NSManagedObject *evalBook = [[evalBooks objectAtIndex:thisEvalBook] retain];
NSString *rawIsbn = [[evalBook valueForKey:kOC_Eval_Bookcode] retain];
NSString *isbnRoot = [[self getIsbnRootFromIsbn:rawIsbn] retain];
// this is a custom method I created and use elsewhere without any issues.
NSArray *foundBooks = [self getEntitiesByName:kOC_EntityName_TargetBook
usingPredicateValue:[NSString stringWithFormat:@"%@ CONTAINS %@", kOC_Target_PrintBookCode, isbnRoot]
withSubstitutionVariables:nil
inModel:[self managedObjectModel]
andContext:[self managedObjectContext]
sortByAttribute:kOC_Target_PrintBookCode];
if (foundBooks != nil) {
[foundBooks retain];
NSLog(@"foundBooks: %lu", [foundBooks count]);
} else {
}
這個技巧。而且,是的,我可能會混淆兩者。非常感謝你的幫助! – 2011-04-18 19:33:28
添加'%@'後,效果很好。謝謝。 – iOSAppDev 2012-03-29 06:44:32