1

私のアプリはコアデータを利用しています。コア データ レコードをロードしたデータ ソース (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 つです)。

4

1 に答える 1

1

あなたがコメントで言ったように、fieldTextUTF-8に変換されるのはe2 80 8b 41.

UTF-8e2 80 8bは UnicodeU+200B (ZERO WIDTH SPACE)です。

その特殊なスペース文字がどこから来たのかはわかりませんが、文字列の最初または最後にのみ発生する場合は、次のようにして取り除くことができます

fieldText = [fieldText stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
于 2013-11-05T20:37:30.167 に答える