các tài liệu nhà nước:cách 'đúng' để sử dụng objectWithID NSManagedObjectContext của những gì:
... Phương pháp này luôn trả về một đối tượng. Dữ liệu trong cửa hàng liên tục được đại diện bởi objectID được giả định là tồn tại — nếu không, đối tượng trả lại sẽ xuất ngoại khi bạn truy cập bất kỳ thuộc tính nào (tức là khi lỗi được kích hoạt). Lợi ích của hành vi này là nó cho phép bạn tạo và sử dụng lỗi, sau đó tạo hàng bên dưới sau hoặc trong ngữ cảnh riêng biệt.
và trong ứng dụng mẫu 'Lõi Công thức' của Apple kết quả của phương pháp này được sử dụng để cư trú một NSFetchRequest, và sau đó kết quả của yêu cầu được sử dụng, với ý kiến về việc đó:
// first get the object into the context
Recipe *recipeFault = (Recipe *)[context objectWithID:objectID];
// this only creates a fault, which may NOT resolve to an object (for example, if the ID is for
// an objec that has been deleted already): create a fetch request to get the object for real
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
[request setEntity: [NSEntityDescription entityForName:@"Recipe" inManagedObjectContext:context]];
NSPredicate *predicate = [NSPredicate predicateWithFormat: @"(self == %@)", recipeFault];
[request setPredicate: predicate];
Tôi có thấy nhiều ví dụ (mã khác, và 'iClass' của quả táo), kết quả từ objectWithID
được sử dụng trực tiếp - có nghĩa là, các thuộc tính của nó được truy cập và xử lý vui vẻ cùng.
Nên objectWithID
luôn là được coi là đối tượng 'có thể tồn tại' này không?
Tôi hỏi vì tôi vừa mới chạy vào điều này và đã không tìm nạp được sự tồn tại của nó.
tôi đoán những gì tôi không hiểu là, sau đó, nếu nó bằng cách nào đó 'tốt hơn' hoặc 'thích hợp hơn' để làm fetchRequest, sử dụng đối tượng quay trở lại để tìm hiểu xem nó có tồn tại hay không. cố gắng truy cập các thuộc tính của nó, và lấy lại một ngoại lệ vì đối tượng không tồn tại? là cái thứ hai, một loại lối tắt, hay là nó bị bệnh? – lulu
Câu trả lời là "nó phụ thuộc". Nếu bạn đang mã hóa cho một tình huống mà bạn biết đối tượng sẽ tồn tại, ví dụ như nơi người dùng không có khả năng xóa đối tượng, thì hãy tiếp tục. Nếu nó có thể không tồn tại, thì bạn sẽ phải thực hiện yêu cầu tìm nạp hoặc bắt ngoại lệ. Đó là thích hợp hơn? Tôi đoán đó là một câu hỏi về phong cách. Tôi có thể nghiêng về phía yêu cầu tìm nạp. – paulbailey
cảm ơn, paulbailey. – lulu