我想爲我的核心數據實體生成謂詞編輯器模板。在我的代碼我有以下:NSPredicateEditorRowTemplate和CoreData
NSEntityDescription *descrip = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:managedObjectContext];
NSArray *templates = [NSPredicateEditorRowTemplate templatesWithAttributeKeyPaths:[NSArray arrayWithObjects:@"name", @"age", nil] inEntityDescription:descrip];
[ibPredicateEditor setRowTemplates: templates];
NSPredicate *p = [NSPredicate predicateWithFormat:@"name like 'John'"];
[ibPredicateEditor setObjectValue:p];
打印出來的模板陣列中的內容給我以下:
CFArray 0x1002d7400 [0x7fff70ff5f20] {類型=不可變的,計數= 2,值= ( 0:NSPredicateEditorRowTemplate 0x10025c090:[名稱] [99,4,5,8,9] NSStringAttributeType 1:NSPredicateEditorRowTemplate 0x1002d2dc0:[年齡] [4,5,0,2,1,3] NSInteger16AttributeType )}
當這個代碼執行我得到的控制檯上執行以下操作:
Warning - unable to find template matching predicate name LIKE "John"
這樣做看起來非常簡單的,所以我似乎無法界面找出我我做錯了。任何幫助將不勝感激!
編輯
我原來的問題是,我用LIKE操作時,我的模板不支持它。然而,我爲什麼在將複合謂詞傳入編輯器時收到類似的警告而感到困惑。
NSPredicate *p = [NSPredicate predicateWithFormat:@"name CONTAINS 'John'"];
NSPredicate *p2 = [NSPredicate predicateWithFormat:@"name CONTAINS 'Jo'"];
NSPredicate *final = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:p, p2, nil]];
[ibPredicateEditor setObjectValue: final];
OR
NSPredicate *final = [NSCompoundPredicate orPredicateWithSubpredicates:[NSArray arrayWithObjects:p, p2, nil]];
[ibPredicateEditor setObjectValue: final];
這兩個產生了類似的警告是我最初的問題。然而,我覺得奇怪的是,我可以使用單個謂詞並構建複合詞和謂詞,但是我無法將預先構建的複合詞和謂詞傳遞給編輯器。
阿希利,謝謝你的詳細澄清。 – Carmen 2010-01-28 02:55:20