Tôi có đối tượng Car.h. Car.h có carparts.h (NSSet cho mối quan hệ).Xóa đối tượng trong mối quan hệ NSSet
Tôi cần xóa một trong các phần trong NSSet thuộc đối tượng car.h.
Làm cách nào để thực hiện việc này?
Tôi có đối tượng Car.h. Car.h có carparts.h (NSSet cho mối quan hệ).Xóa đối tượng trong mối quan hệ NSSet
Tôi cần xóa một trong các phần trong NSSet thuộc đối tượng car.h.
Làm cách nào để thực hiện việc này?
Nếu car.mySet
là thiết lập của bạn, bạn có thể thử nó như là,
NSMutableSet *mutableSet = [car.mySet mutableCopy];
[mutableSet removeObject:carpartsObject];
car.mySet = [mutableSet copy];
Tôi giả định rằng Car
là một lớp con của NSManagedObject
kể từ khi bạn có thẻ lõi dữ liệu.
Dữ liệu cốt lõi tuân thủ KVO.
Reference here
được tạo tự động accessor Phương pháp
Theo mặc định, Core Data động tạo ra công hiệu quả và get nguyên thủy và thiết lập các phương pháp accessor đối với tài sản theo mô hình (các thuộc tính và các mối quan hệ) của các lớp đối tượng quản lý. Điều này bao gồm các phương thức ủy nhiệm mã hóa khóa giá trị khóa như add<Key>Object:
và loại bỏ:, như được trình bày chi tiết trong tài liệu cho mutableSetValueForKey: —các đối tượng được quản lý là các proxy có thể thay đổi hiệu quả cho tất cả các mối quan hệ của họ.
khác Reference here về quy ước đặt tên cho KVO
Để có giá trị khóa mã hóa đơn khiếu nại cho một mutable unordered to-many relationship
bạn phải thực hiện các phương pháp sau đây:
-add<Key>Object: or -add<Key>:
. Phải thực hiện ít nhất một trong các phương thức này. Đây là tương tự với phương pháp NSMutableSet addObject :.
-remove<Key>Object: or -remove<Key>:
. Phải thực hiện ít nhất một trong các phương thức này. Đây là tương tự với phương pháp NSMutableSet removeObject :.
-intersect<Key>:
. Không bắt buộc. Triển khai nếu điểm chuẩn cho biết hiệu suất là một vấn đề. Nó thực hiện hành động tương đương của phương thức NSSet intersectSet :.
Đây là phản ứng tốt hơn, sau đó, trong một dòng: [xe loại bỏCarpartsObject: carpartsObject]; – Esteve
Nếu bạn muốn chắc chắn đối tượng to-many cũng được lấy ra từ lưu trữ đối tượng (hành động mặc định là để vô hiệu hóa các công ty mẹ), bạn có thể ghi đè lên một trong những phương pháp tự động tạo ra của Car
:
- (void)removeCarpartsObject:(Carpart *)value
{
NSMutableSet *set = [self mutableOrderedSetValueForKey:NSStringFromSelector(@selector(carparts))];
[set removeObject:value];
[self.managedObjectContext deleteObject:value];
}
Chỉ cần một cách khác để xóa đối tượng trong NSSet khỏi Dữ liệu cốt lõi đang sử dụng bên dưới. Tôi đã thử phương pháp này và bản thân nó cũng hoạt động.
- (void)removeCarpartsObject:(Carpart *)value
{
NSError *error;
NSInteger index = [car.mySet.allObjects indexOfObject:carpartsObject];
[self.managedObjectContext deleteObject:car.mySet.allObjects[index]];
[self.managedObjectContext save:&error];
}
hoàn hảo! hoạt động, cảm ơn! –
Rất vui được giúp đỡ. Cảm ơn. :) – iDev