2011-04-11 14 views
4

我正在對兩個列表進行簡單比較,以查看「評估」列表中的哪些項目包含在較大的「目標」列表中。我通過解析兩個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 { 

     } 

回答

3

如果您建立您的謂語爲NSString,我相信

[NSString stringWithFormat:@"%@ CONTAINS %@", kOC_Target_PrintBookCode, isbnRoot] 

實際上應該是

[NSString stringWithFormat:@"%@ CONTAINS '%@'", kOC_Target_PrintBookCode, isbnRoot] 

看來你混淆的方式與途徑predicateWithFormat:作品stringWithFormat:作品。

+0

這個技巧。而且,是的,我可能會混淆兩者。非常感謝你的幫助! – 2011-04-18 19:33:28

+0

添加'%@'後,效果很好。謝謝。 – iOSAppDev 2012-03-29 06:44:32

0

推測要麼kOC_Target_PrintBookCodeisbnRoot是不是可以轉換爲字符串的對象。例如。如果其中一個是整數,那麼%@運算符不能將整數轉換爲字符串值。

+0

'kOC_Target_PrintBookCode'和'isbnRoot'都是明確的字符串。我首先用它來填充商店。 isbnRoot是一個字符串的子集。數據中沒有涉及任何數字,因此我的困惑。 – 2011-04-11 22:59:04