2013-08-05 14 views
6

Tôi gặp sự cố khi sử dụng NSPredicatepredicateWithFormat:argumentArray:. Trong ví dụ này, serverIDList là mảng các chuỗi. Kết quả là một mảng của NSManagedObjects với thuộc tính có tên "flid", là một chuỗi.Vị từ NSPredicateWithFormat: argumentsArray: Chỉ đánh giá đối số đầu tiên

NSMutableString *predicateString = [[NSMutableString alloc] init]; 

[predicateString appendString:@"(flid IN %@)"]; 

[results filterUsingPredicate:[NSPredicate predicateWithFormat:predicateString argumentArray:serverIDList]]; 

Vấn đề là [NSPredicate predicateWithFormat:predicateString argumentArray:serverIDList] đánh giá để "flid TRÊN '2155'", mà chỉ là giá trị đầu tiên của mảng serverIDList. Tôi dường như không thể có được vị từ để đánh giá toàn bộ mảng. Có điều gì thiếu ở đây không?

Cảm ơn!

Trả lời

26
[NSPredicate predicateWithFormat:@"(flid IN %@)" argumentArray:serverIDList] 

tương đương với

[NSPredicate predicateWithFormat:@"(flid IN %@)", id1, id2, ..., idN] 

nơi id1 ..., idN là những yếu tố của mảng serverIDList. Điều đó sẽ giải thích tại sao chỉ có phần tử đầu tiên được đánh giá.

Những gì bạn có thể muốn là

[NSPredicate predicateWithFormat:@"(flid IN %@)", serverIDList] 

Ghi chú: tôi sẽ recomment không để tạo vị như chuỗi đầu tiên. Cơ hội cho các lỗi trích dẫn hoặc lỗi thoát là khá cao. Chỉ sử dụng predicateWithFormat với một chuỗi định dạng không đổi . Nếu bạn phải kết hợp các biến vị ngữ trong thời gian chạy, sử dụng NSCompoundPredicate.

+0

Ahhh cảm ơn lời giải thích! –

Các vấn đề liên quan