-1
我有一個字典數組。我想是這樣謂詞拋出異常在可可ObjC
ANY student.project_code BEGINSWITH[cd] "N8"
拋出的錯誤是
不能做的東西一個子操作不是一個字符串(左= <null>
RHS = N8)
問題是有些學生沒有項目代碼。我如何擺脫這個錯誤?
我有一個字典數組。我想是這樣謂詞拋出異常在可可ObjC
ANY student.project_code BEGINSWITH[cd] "N8"
拋出的錯誤是
不能做的東西一個子操作不是一個字符串(左= <null>
RHS = N8)
問題是有些學生沒有項目代碼。我如何擺脫這個錯誤?
您可以使用塊謂詞來代替:
NSPredicate *p = [NSPredicate predicateWithBlock:BOOL ^(id evaluatedObject, NSDictionary *bindings) {
return [((NSDictionary *)evaluatedObject)["@project_code"] hasPrefix:@"N8"];
}];
塊謂詞是類似於正常謂詞,除了沒有評估針對每一個對象謂詞字符串,它只是調用您提供的自定義模塊,將其傳遞當前正在測試的對象,如果對象符合您的規則,則返回YES
,否則返回NO
。這樣可以提供更大的靈活性,因爲您可以在塊中運行任何代碼,並且不受SQL樣式條件的限制。
上面的代碼創建了一個謂詞,用於過濾字典數組,每個字典都有一個project_code
鍵(如果鍵不存在,該方法將返回nil,因此該檢查將爲false,這正是您想要的)。
您是否可以修改您的數據模型以存儲空字符串而不是零,以便沒有項目代碼的學生使用?這將解決問題,因爲一切都將是一個字符串。 – Greg 2014-10-06 11:14:00
@PartiallyFinite其實數據是從服務器返回的。因此,這是不能做到的。在這裏,json被直接轉換爲使用通用類的字典。 – 2014-10-06 12:00:48
由於您實際上並未使用任何類型的數據庫,因此您可以使用塊謂詞代替 - 性能不會變慢,並且您將獲得實際代碼的全部功能。 – Greg 2014-10-06 12:07:12