2012-11-05 16 views
5

Tôi có câu hỏi liên quan đến Bộ nhớ cache trên iOS. Tôi có dữ liệu quan hệ cha-con từ một máy chủ từ xa và ánh xạ đối tượng đó đến đối tượng NSManagedObject bằng Restkit. Vấn đề mà tôi hiện đang gặp là mọi yêu cầu đến máy chủ luôn xóa sạch mối quan hệ "con" và thay thế nó bằng dữ liệu mới đến từ máy chủ. Có cách nào để tránh những người đó và nối thêm đứa trẻ mới thay thế không?Mối quan hệ khôi phục nhiều liên kết để đặt thay vì thiết lập tập hợp mới

Ví dụ: Tôi có mối quan hệ Danh mục -> Sản phẩm cổ điển.

{"categories": [ 
    { 
     "cat_id": "1", 
     "cat_title": "category 1", 
     "cat_tag": 1, 
     "product": [ 
      { 
       "prod_id": "1", 
       "prod_name": "product 1", 
       "prod_tag": 1 
      }, 
      { 
       "prod_id": "2", 
       "prod_name": "product 2", 
       "prod_tag": 1 
      } 
     ] 
    } 
] } 

Và đó hoạt động tốt và tất cả mọi thứ được lưu đúng với mối quan hệ trên CoreData. Nhưng nếu tôi thực hiện một yêu cầu đến máy chủ và có một phản ứng mới:

{"categories": [ 
    { 
     "cat_id": "1", 
     "cat_title": "category 1", 
     "cat_tag": 1, 
     "product": [ 
      { 
       "prod_id": "3", 
       "prod_name": "product 3", 
       "prod_tag": 1 
      }, 
      { 
       "prod_id": "4", 
       "prod_name": "product 4", 
       "prod_tag": 1 
      } 
     ] 
    } 
] } 

tôi sẽ có sản phẩm 3 và sản phẩm thay thế 4 sản phẩm 1 và 2 sản phẩm trên cơ sở dữ liệu. Tôi chắc chắn rằng tôi thiết lập tất cả các mối quan hệ và khóa chính một cách chính xác. (Cả hai cat_idprod_id được đặt làm khóa chính).

Sau khi điều tra thông qua khuôn khổ nội bộ của RestKit, tôi nhận thấy rằng xung quanh line 576 trong lớp RKObjectMappingOperation, có

RKLogTrace(@"Mapped NSSet relationship object from keyPath '%@' to 
      '%@'. Value: %@", relationshipMapping.sourceKeyPath, 
      relationshipMapping.destinationKeyPath, destinationObject); 

NSMutableSet *destinationSet = [self.destinationObject 
         mutableSetValueForKey:relationshipMapping.destinationKeyPath]; 
[destinationSet setSet:destinationObject]; 

Vì vậy, tôi đoán đó là dễ dàng chỉ cần thay đổi

[destinationSet setSet:destinationObject];

đến

[destinationSet addObjectsFromArray:[destinationObject allObjects]]

Nhưng tôi đã tự hỏi liệu có cách nào tốt hơn để làm điều đó không?

Chúc mừng,

Trả lời

2

Cảm ơn sự hỗ trợ từ Reskit. Nó hiện đang được hỗ trợ bởi RKRelationshipMapping. (https://github.com/RestKit/RestKit/issues/989)

Chỉ cần thiết lập giá trị của assignmentPolicyRKRelationshipMapping dụ để RKUnionAssignmentPolicy

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