Điều gì Mike Weller đã viết là đúng. Tôi sẽ mở rộng câu trả lời một chút.
Trước tiên, bạn cần phải tạo ra một NSFetchRequest
như sau:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"Selection" inManagedObjectContext:context]];
Sau đó, bạn phải thiết lập vị cho rằng yêu cầu như sau:
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"content == %@ AND page_id == %@ AND book_id == %@", contentVal, pageVal, bookVal]];
nơi
NSString* contentVal = @"test";
NSNumber* pageVal = [NSNumber numberWithInt:5];
NSString* bookVal = @"1331313";
Tôi đang sử dụng %@
vì tôi giả sử bạn đang sử dụng o bjects và không phải là các giá trị vô hướng.
Bây giờ bạn thực hiện một lấy trong bối cảnh với các yêu cầu trước đó:
NSError* error = nil;
NSArray* results = [context executeFetchRequest:fetchRequest error:&error];
results
chứa tất cả các đối tượng được quản lý phù hợp với vị ngữ.
Cuối cùng, bạn có thể lấy các đối tượng và gọi xóa chúng.
[context deleteObject:currentObj];
Sau khi hoàn tất, bạn cần lưu ngữ cảnh theo tài liệu.
Cũng như một đối tượng mới không được lưu vào cửa hàng cho đến khi bối cảnh được lưu, một đối tượng đã xóa sẽ không bị xóa khỏi cửa hàng cho đến khi ngữ cảnh được lưu.
Do đó
NSError* error = nil;
[context save:&error];
Lưu ý rằng save
phương thức trả về một giá trị bool. Vì vậy, bạn có thể sử dụng một cách tiếp cận như sau hoặc hiển thị một cảnh báo cho người dùng. Nguồn NSManagedObjectContext save error.
NSError *error = nil;
if ([context save:&error] == NO) {
NSAssert(NO, @"Save should not fail\n%@", [error localizedDescription]);
abort();
}
Cảm ơn câu trả lời của bạn – samir
@flexaddicted Điều này cần được chỉnh sửa để bao gồm lệnh '[context save: & error]' cần thực hiện, nếu không đối tượng đã xóa sẽ không bị xóa khỏi cửa hàng . Ngoài ra, nếu bạn đang sử dụng một cửa hàng liên tục, nó phải được lưu như sau: '[context saveToPersistentStore: & error]'. –
@EvanR Đã sửa đổi câu trả lời của tôi có tính đến nhận xét của bạn. –