私のアプリはコアデータを利用しています。コア データ レコードをロードしたデータ ソース (NSMutableArray) があります。レコードをフィルタリングするために、.m ファイルに UITextField デリゲートを持つtextfield ( JSTokenField ) を使用しています。
検索結果をフィルタリングするときは、単純な述語を使用しています。
-(void)textFieldChanged
{
NSString *fieldText =_toField.textField.text;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"cLastName contains[cd] %@",fieldText];
NSArray *testArr = [coreDataSource filteredArrayUsingPredicate:predicate]; //coreDataSource is my MutableArray with all core data records
NSLog(@"%@",predicate);
NSLog(@"Testarr %@",testArr);
}
NSLog は空の配列を返します:
2013-11-05 20:53:36.765 MyApp[3045:60b] cLastName CONTAINS[cd] "a"
2013-11-05 20:53:36.766 Myapp[3045:60b] Testarr (
)
ただし、次のように述語文字列を変更 (ハードコード) すると、次のようになります。 NSString *fieldText = @"a"; 私のコードでは、有効な結果が得られます。
2013-11-05 21:00:34.917 MyApp[3054:60b] cLastName CONTAINS[cd] "a"
2013-11-05 21:00:34.929 MyApp[3054:60b] Testarr (
"<MyUser: 0x1566fed0> (entity: MyUser; id: 0x156dbc30 <x-coredata://33798AE4-9768-4A2F-A0E8-C094F32972AD/MyUser/p5565> ; data: {\n activities = \"<relationship fault: 0x1551c540 'activities'>\";\n etc...
サブクラス化されたテキストフィールドで機能しないのはなぜですか...
ところで、coreDataSource 配列は、さまざまなプロパティを持つカスタム オブジェクトの配列です (cLastName はその 1 つです)。