2012-04-23 24 views
8

Tôi đang sử dụng NSPredicate cho Tìm kiếm thực hiện như trên iPhone khi chúng tôi tìm kiếm bất kỳ ứng dụng nào.NSPredicate cho Tìm kiếm Thông thường

Tôi có nói ví dụ 4 từ khóa

  1. Deccan
  2. New Delhi
  3. Ahmedabad
  4. Salaam Delhi

Tôi đã cố gắng tạo ra một vị với

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"keyword BEGINSWITH[c] 'd'" Nó cho tôi Deccan làm đầu ra. Nhưng vấn đề là tôi muốn mỗi từ bắt đầu với d Vì vậy, từ ví dụ trên tôi cần đầu ra như Deccan, New Delhi, Delhi Salaam nhưng KHÔNG Ahmedabad

stucked trong vấn đề này từ vài giờ. cố gắng chứa, trận đấu nhưng may mắn của tôi ..

Bất kỳ giúp đỡ về phía con đường đúng đắn sẽ thực sự được đánh giá cao ..

Trả lời

13

Thanks guys trả lời của bạn s Đây là những gì tôi đưa ra với

NSString *matchString = [NSString stringWithFormat: @".*\\b%@.*",searchText]; 
NSString *predicateString = @"keyword MATCHES[c] %@"; 
NSPredicate *predicate =[NSPredicate predicateWithFormat: predicateString, matchString]; 
1

Có hai cách để bạn có

  1. Chia steing bởi '' và sử dụng của bạn NSPredicate *predicate = [NSPredicate predicateWithFormat:@"keyword BEGINSWITH[c] 'd'"]
  2. Hoặc, cách tốt hơn, sử dụng hai vị từ:

predicate = [NSPredicate predicateWithFormat:@"keyword BEGINSWITH[c] 'd' OR keyword contains[c] ' d'"] // i mean,'space+d'

Vì vậy, bạn sẽ thỏa mãn cả hai trường hợp có thể xảy ra.

+0

thanks @Nikita. Nó hoạt động với ký tự tĩnh đơn. nhưng lấy một ví dụ nơi các nhân vật đang đến động. Nếu tôi gõ d nó đi kèm với ba tùy chọn và khi tôi gõ 'del' nó sẽ hiển thị từ khóa 2 và 4 –

0

Cân nhắc "thích" và "đối sánh". Tuy nhiên, lưu ý rằng đây là những hoạt động tương đối đắt tiền và có thể mất nhiều thời gian trên các tập dữ liệu lớn.

Trong ví dụ này, tôi giả sử những gì bạn muốn là để phù hợp nếu có từ không gian tách ra trong bắt đầu với "d"

này sẽ kiểm tra xem từ khóa hoặc bắt đầu với 'd' hoặc có một chuỗi với một tiếp theo là 'd'

[NSPredicate predicateWithFormat:@"(keyword BEGINSWITH[c] 'd') OR (keyword LIKE[c] '* d')"] 

một này sử dụng một biểu thức chính quy, mà là rất tương tự (sử dụng regex phù hợp nhất với tình hình của bạn:

[NSPredicate predicateWithFormat:@"keyword MATCHES[c] '^d.*|.*\\sd.*'"] 
Các vấn đề liên quan