0

与えられた:

MyObject *object1 = [MyObject createWithName:@"name1"];
MyObject *object2 = [MyObject createWithName:@"name2"];
MyObject *object3 = [MyObject createWithName:@"name3"];

NSArray *myArray = @[object1, object2, object3];
NSString *name = @"name1";

やっている

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == '%@'", name];
NSArray *filtered = [myArray filteredArrayUsingPredicate:predicate];

私を残します

filtered.count == 0

しかし

NSPredicate *predicate = [NSPredicate predicateWithFormat:
                               [NSString stringWithFormat:"name == '%@'",name]];
NSArray *filtered = [myArray filteredArrayUsingPredicate:predicate];

私を残します

[filtered objectAtIndex:0] == object1

なんで?これは predicateWithFormat の奇妙な動作のようです。NSPredicate のフォーマットの定義は NSLog/NSString とは異なりますか? docsで明らかなことは何も見つかりませんでした。

前もって感謝します!

4

1 に答える 1

2

2番目のバージョンが機能する理由はわかりませんが、最初のバージョンが機能しない理由は、@を一重引用符で囲んだためです。これにより@がリテラルになるため、実際にはname == @をフィルタリングしていますが、これは必要なものではありません。一重引用符を削除するだけで、機能します。

于 2012-11-14T04:38:27.133 に答える