Tôi đã gặp phải các kết quả không nhất quán trong khi phát triển ứng dụng iPhone và cố lưu các tùy chọn thông qua cơ chế NSUserDefaults chuẩn. Tôi đang sử dụng mã gần như thẳng ra khỏi Cookbook của nhà phát triển iPhone của Erica Sadun (cuốn sách btw tuyệt vời), có vẻ như sau:hành vi mặc định không phù hợp (NSUserDefaults) trong mặc định mô phỏng iPhone
(void) updateDefaults { NSMutableArray *spells = [[NSMutableArray alloc] init]; NSMutableArray *locs = [[NSMutableArray alloc] init]; for (DragView *dv in [boardView subviews]) { [spells addObject:[dv whichSpell]]; [locs addObject:NSStringFromCGRect([dv frame])]; } [[NSUserDefaults standardUserDefaults] setObject:spells forKey:@"spells"]; [[NSUserDefaults standardUserDefaults] setObject:locs forKey:@"locs"]; [[NSUserDefaults standardUserDefaults] synchronize]; [spells release]; [locs release]; }
Các giá trị được lưu, đôi khi ... và phục hồi, đôi khi. Tôi không thể nhận được một hạt chính xác về những gì hiện hoặc không làm cho nó hoạt động.
Có ai khác có bất kỳ trải nghiệm tương tự nào không? Bất kỳ đề xuất về những gì có thể làm cho nó hoạt động? Là phương pháp đồng bộ hóa cách tốt nhất để buộc ghi đĩa và làm cho các giá trị được lưu, hoặc có cái gì đó tốt hơn (cả cho sản xuất, cũng như mô phỏng).
Cảm ơn Ryan
Ok, cảm ơn. Tôi hơi bối rối là tại sao tôi cần phải sử dụng một NSKeyedArchiver để lưu trữ một mảng ... sẽ setObject tiêu chuẩn không hoạt động chính xác hoặc đầy đủ vì một lý do nào đó? Tôi đã không chạy trên NSKeyedArchiver trước đây, vì vậy tôi không quen thuộc với nhiều hơn đoạn giới thiệu từ các tài liệu. –
Tôi tin rằng bạn cần sử dụng nó để đảm bảo rằng các lớp tuân thủ NSCoding tùy chỉnh của bạn được lưu trữ đúng cách. Tôi nghĩ rằng setObject chỉ hoạt động với các mảng của các đối tượng được hỗ trợ. Tôi có thể sai mặc dù. –