Cập nhật: Điều này có tác dụng nếu tôi gọi lưu trữRootObject: from applicationDidFinishLaunching :. Nếu tôi gọi nó từ init: phương thức của một lớp singleton, nó trả về nil.NSKeyedUnarchiver unarchiveObjectWithFile: trả về nil bằng init: phương thức
Tôi rất bối rối bởi hành vi của NSKeyedUnarchiver unarchiveObjectWithFile :. The documentation cho biết rằng nó sẽ trả về 0 nếu tệp không tồn tại. Với một trong các đối tượng của tôi, những điều sau xảy ra:
Game *g1 = [Game getGame];
NSString *archivePath = [Game getArchivePath];
bool success = [NSKeyedArchiver archiveRootObject:g1 toFile:archivePath];
Game *g2 = [NSKeyedUnarchiver unarchiveObjectWithFile:archivePath];
// success is true, g2 is nil
Tôi đã xác minh rằng tệp thực sự tồn tại và được ghi vào phương pháp archiveRootObject :. Tôi đang làm gì sai khiến tôi không nhận được đối tượng Game trở lại trong kho lưu trữ?
Tôi nghi ngờ điều này sẽ giải quyết câu hỏi của bạn, nhưng trong Mục tiêu-C, thuật ngữ thích hợp là 'BOOL' thay vì' bool'. – jbrennan
Cảm ơn mẹo. Đây là dự án Objective-C đầu tiên của tôi. Tôi đã cập nhật tất cả các bool của tôi để BOOL của. – brantonb
Đặt điểm ngắt tại objc_exception_throw và xem liệu có ngoại lệ không. – peterb