2011-02-09 7 views
3

このコードは、オブジェクトが正しくない0個のオブジェクトを返します。ただし、述語を削除すると、フェッチ要求によってすべてのオブジェクトが戻されます。コアデータNSPredicate with SQLITEストア

NSError *error = nil; 

NSEntityDescription *entityDescription = [NSEntityDescription            entityForName:@"Person" inManagedObjectContext:[self managedObjectContext]]; 

NSPredicate * pr = [NSPredicate predicateWithFormat:@"%K beginswith '%@' ", 
        @"FullName", searchText]; 

//NSPredicate * pr = [NSPredicate predicateWithFormat:@"PersonID == %@", searchText]; Works fine 


NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease]; 
[request setEntity:entityDescription]; 
[request setPredicate:pr]; 
NSArray * arr = [[self managedObjectContext] executeFetchRequest:request error:&error]; 

FullName属性には、Unicodeデータ(アラビア語)が含まれています。

何か助けていただければ幸いです。

答えて

7

試してみてください。

NSPredicate * pr = [NSPredicate predicateWithFormat:@"FullName beginswith %@", searchText]; 
+2

+1 '%の@'置換は自動的に文字列として値を解釈する使用。その周りに一重引用符は必要ありません。一重引用符を追加する必要がある場合、 '%K'置換の必要はありません。 –

+0

@Dave '%K'フォーマット指定子は何をしていますか?私はこれを使用したことがなく、Apple String Programming GuideまたはIEEE PRINTFの仕様書でそれに関する文書を見つけることができませんでした。 –

+3

これは、引用符で囲まれていない文字列の値を置換するために使用されるので、主にキーパス(したがって '%K')に使用されます。内部的には、 'NSConstantValueExpression'ではなく' NSKeyPathExpression'になります(これは他の置換形式を使用した場合と同じです)。 '%K'は' NSPredicate'フォーマット文字列に固有のものです。私はどこにでも出会ったとは思わない。 –

関連する問題