Tôi có một kiểu đơn giản Foo
đại diện cho sở thích của người dùng và đóng gói NSString
và NSNumber
. Tôi muốn lưu trữ một mảng các giá trị mặc định của người dùng là Foo
để chúng tồn tại giữa các lần khởi chạy ứng dụng; và tôi muốn hiển thị chúng trong chế độ xem bảng để người dùng có thể thêm, xóa và chỉnh sửa chúng. Giải pháp cho điều này có vẻ khá đơn giản với các ràng buộc, nhưng điều đó chứng minh rằng tôi không thể thực sự làm việc được.Chế độ xem bảng có thể chỉnh sửa được liên kết với NSArrayController được liên kết với NSUserDefaultsController
Khi ứng dụng của tôi khởi chạy, tôi đăng ký với NSUserDefaults
một kho lưu trữ được khóa của một mảng các số Foo
ban đầu. Trong XIB của tôi, tôi có một bộ điều khiển mảng với mảng nội dung được liên kết với người dùng được chia sẻ mặc định là khóa điều khiển values
của bộ điều khiển; với đường dẫn chính của foos
; 'Kiểm soát nội dung dưới dạng giá trị hợp chất' được chọn; và NSKeyedUnarchiveFromData
là biến áp giá trị. Chế độ xem bảng sau đó được liên kết với bộ điều khiển mảng và các cột của bảng với các thuộc tính của Foo
.
Công cụ này hoạt động hoàn hảo khi Foo
được thêm và xóa khỏi mảng — khóa foos
trong mặc định của người dùng được cập nhật để phản ánh nội dung mới của mảng. Vấn đề là những thay đổi đối với các thuộc tính của một cá nhân Foo
không kích hoạt tương tự mảng được ghi lại về giá trị mặc định của người dùng. Tôi tin rằng lý do cho điều này được thảo luận trong phần 'To-many Relationships' của 'Đăng ký khóa phụ thuộc' trong Hướng dẫn lập trình quan sát giá trị khóa: các thay đổi đối với mảng của bộ điều khiển mảng được quan sát, nhưng thay đổi đối với thuộc tính của các phần tử được chứa .
Mặc dù nhận ra đây là vấn đề tôi không thể cho cuộc sống của tôi tìm ra những gì để thực sự làm để thực hiện công việc này. Khi tôi quan sát thay đổi trên Foo
tôi cần thông báo đối tượng nào và với thông điệp nào sao cho toàn bộ mảng được ghi lại về giá trị mặc định của người dùng— NSUserDefaults
, NSUserDefaultsController
, NSArrayController
? Tôi muốn tài liệu của Apple không chỉ đề cập đến vấn đề này và đã cung cấp một số mã ví dụ thực tế để giải quyết nó — Tôi đã thử mọi thứ và tôi không thể tìm thấy câu thần chú.
Điều này tương tự như How to get notified of changes to models via an NSArrayController nhưng tôi không thể thực hiện bước nhảy khái niệm giữa những gì anh ấy đang làm với chế độ xem tùy chỉnh và sử dụng bind:toObject:withKeyPath:options:
.
Cảm ơn! :)
Điều này thực sự giống như một công việc cho CoreData không phải NSUserDefaults. –
Bạn có thể xây dựng? Chỉ cần suy nghĩ về số lượng tài liệu tôi cần phải tiêu hóa để thậm chí bắt đầu triển khai điều này với CoreData khiến tôi đau đầu. Từ quan điểm của mô hình dữ liệu, những gì tôi đang cố gắng làm có vẻ cực kỳ đơn giản — vì sự phức tạp của CoreData có vẻ như quá mức cần thiết ở đây. –
cài đặt mặc định của người dùng dành cho cài đặt và bạn đang cố gắng sử dụng nó để lưu trữ mô hình dữ liệu của bạn dưới dạng âm thanh của nó. CoreData thực sự không phải là rất khó khăn nếu bạn thực sự có một mô hình dữ liệu đơn giản. xcode có các mẫu dự án cho nó về cơ bản thực hiện tất cả các thiết lập cho bạn. nó cũng sẽ giải quyết vấn đề bạn mô tả. –