2012-01-30 56 views
7

A. bB. a là các mối quan hệ nghịch đảo với nhiều người. Tại sao vị này cho A công việc:Tại sao "KHÔNG IN" không hoạt động trong NSPredicate này?

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT SELF IN %@", bObject.a]; 

trong khi cái này không:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT %@ IN b", bObject]; 

Tôi nghĩ rằng cả hai vị nên cho kết quả tương tự - bộ sưu tập các A s mà không có mối quan hệ với bObject qua a<-->b. Nhưng trong thực tế, người đầu tiên cung cấp cho bộ sưu tập chính xác trong khi một trong những thứ hai không.

Cập nhật:


Đây là một sample project trong đó A. b được thể hiện bởi Account. filtered_clientsB. a được thể hiện bằng Client. filtered_by.

Chuyển đổi nhận xét của dòng 143 và dòng 144 trong MasterViewController.m để xem sự khác biệt.

Vui lòng giúp tôi tìm lỗi trong mã của tôi hoặc xác nhận lỗi là lỗi Core Data để tôi có thể báo cáo lỗi cho Apple. Cảm ơn rất nhiều.

+0

Vị từ thứ hai của bạn dường như đang kiểm tra nếu b không nằm trong b - đó là ý của bạn? –

+0

Như Nick đã chỉ ra: Bạn có thể cung cấp thêm một chút mã không. Biến 'b' là gì? Làm cách nào để tạo yêu cầu tìm nạp? –

+0

Để rõ ràng hơn, tôi đã thay đổi tên biến thành "bObject" là một thể hiện của B. – an0

Trả lời

0

Từ các tài liệu:

Quan trọng Bạn phải xác định nhiều-nhiều mối quan hệ trong cả hướng-có nghĩa là, bạn phải xác định hai mối quan hệ, mỗi là nghịch đảo của người kia. Bạn không thể chỉ xác định mối quan hệ nhiều người theo số một hướng và cố gắng sử dụng mối quan hệ này với tư cách nhiều người. Nếu bạn làm như vậy, bạn sẽ kết thúc với các vấn đề về tính toàn vẹn tham chiếu.

Vì vậy, kiểm tra này:

  1. A có nhiều mối quan hệ với B.
  2. B có nhiều mối quan hệ với A.
  3. A mối quan hệ là nghịch đảo của mối quan hệ B .
  4. Mối quan hệ B là nghịch đảo của mối quan hệ A.
+0

Vui lòng đọc câu hỏi và nhận xét bên dưới. Đó là, tất nhiên, một mối quan hệ nhiều-to-manty. – an0

+0

Tôi tin tưởng bạn đã kiểm tra lại ... – Mundi

+0

Có, tôi đã kiểm tra kỹ. – an0

3

Đây là một ý tưởng khác: có thể cố gắng "phủ nhận" số bObject với số NOT. Do đó, hãy thử:

@"NOT (%@ IN b)" 
+1

Giống như @ "NOT% @ IN b". – an0

0

Tôi nghĩ rằng tôi đã tìm thấy câu trả lời cho những người gặp phải câu hỏi này. Rõ ràng bạn cần phải sử dụng SELF để nó hoạt động, ít nhất là trong trường hợp của tôi với hai mối quan hệ rất nhiều. Điều này phù hợp với tôi:

NOT (SELF IN %@) 
Các vấn đề liên quan