2011-08-07 21 views
6

Ứng dụng của tôi đang lấy dữ liệu JSON từ dịch vụ web của chúng tôi. Trong tất cả các trường hợp đến bây giờ, thông tin sẽ được giữ lại trong bộ nhớ hoặc chỉ làm mới khi đang di chuyển mà không cần giữ lại bất kỳ nội dung nào khác ngoài mã thông báo đăng nhập được sử dụng trong API. Với một trong những tính năng mới mà chúng tôi đang thêm vào, chúng tôi sẽ tham gia vào một nhóm vị trí, tối đa 26, với dài, vĩ độ, bán kính và tên.Lưu trữ các đối tượng trong iOS để sử dụng sau này

Tôi cũng cần thêm 1-2 trường vào dữ liệu này để tạo đối tượng lớn hơn. Vì vậy, câu hỏi của tôi là, cách tốt nhất để lưu trữ loại dữ liệu này trong hệ thống tập tin iOS là gì? Hiện tại tôi đã sử dụng NSUserDefaults, nhưng điều đó có vẻ như bị hạn chế hoặc bị bệnh nên có lượng dữ liệu lớn hơn. Có thể không.

Dữ liệu này sẽ cần được truy xuất, thay đổi hoặc chỉnh sửa và được lưu lại. Tất cả điều này trong khi vẫn giữ lại khả năng kéo bất kỳ của 26 đối tượng. Cảm ơn bạn trước đã đọc và giúp đỡ.

Trả lời

5

Đối với một lượng nhỏ dữ liệu (26 mục), tôi đề xuất archiving.

Lưu vào plist sử dụng NSKeyedArchiver/NSKeyedUnarchiver. Đọc dữ liệu của bạn từ didFinishLaunchingWithOptions của đại biểu và lắng nghe UIApplicationWillResignActiveNotification để lưu dữ liệu đó.

A NSUserDefaults là một plist với các tính năng được thiết kế để lưu trữ tùy chọn của người dùng. Nó thường được sử dụng thay vì một plist thường xuyên để tiết kiệm một vài dòng mã, mà tôi nghĩ rằng đó là một ý tưởng tồi bởi vì bạn nhận được một phức tạp bổ sung không liên quan đến nhiệm vụ của bạn.

Nếu bạn muốn đăng nhập được bảo vệ chống lại ai đó ăn cắp thiết bị và thực hiện pháp y, hãy sử dụng Keychain. Bạn có thể muốn sử dụng trình bao bọc và đọc một số bài viết, bình luận nếu bạn quan tâm.

Nếu bạn tìm kiếm nhiều tính năng hơn, hãy xem Best way to store data on iphone nhưng có vẻ như không phải như vậy.

Một số mã để giúp bạn bắt đầu ... Đăng ký gọi tiết kiệm trên ứng dụng từ chức:

[[NSNotificationCenter defaultCenter] 
     addObserver:self 
      selector:@selector(saveMyData) 
       name:UIApplicationWillResignActiveNotification 
      object:nil]; 

Trên mỗi đối tượng của đồ thị/từ điển/bất cứ điều gì bạn muốn lưu trữ thực hiện NSCoding:

- (void)encodeWithCoder:(NSCoder*)coder { 
    [coder encodeObject:myIvar forKey:kmyIvar]; 
} 

- (id)initWithCoder:(NSCoder*)coder { 
    if((self = [super initWithCoder:coder])) { 
     self.myIvar = [[coder decodeObjectForKey:kmyIvar] retain]; 
    } 
    return self; 
} 
+0

Tôi đã xem một số ví dụ về việc sử dụng KeyChain để lưu trữ thông tin đăng nhập mà tôi đã lên kế hoạch triển khai. Cảm ơn bạn về thông tin. –

+0

Lưu trữ âm thanh chắc chắn như ý tưởng tốt hơn cho các mục 20-ish sau đó là CoreData. Và nếu bạn cần lưu trữ tên người dùng và mật khẩu, có nguồn mẫu của Apple mà tôi mô tả cách sử dụng tại đây: http://stackoverflow.com/questions/6972092/ios-how-to-store-username-password-wihtin-an -app/6972305 # 6972305 –

3

Xem hướng dẫn này về dữ liệu cốt lõi. Đó là cách tốt nhất để lưu trữ dữ liệu cục bộ trên thiết bị của bạn. Đó là một API cacao bản địa và nó là các ràng buộc tương thích. Ngoài ra, bạn có thể chọn lưu trữ dữ liệu dưới dạng XML, SQLite và Binary.

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/cdProgrammingGuide.html

Đối với bất kỳ điều gì từ xa lớn, tôi sẽ sử dụng tính năng này.

1

Tôi đã có cùng một câu hỏi này và chỉ tìm ra một giải pháp tốt hơn nhiều.

Điều bạn có thể làm là chỉ lưu chuỗi JSON làm NSUserDefault. Sau đó, khi bạn tải lại ứng dụng, hãy sử dụng cùng một phương thức (hoặc tiện ích khung công tác) mà bạn đã sử dụng để ánh xạ chuỗi JSON cho các đối tượng của bạn lần đầu tiên. Bằng cách này bạn vẫn có thể tận dụng lợi thế của sự dễ dàng của NSUserDefaults.

Nếu bạn đang sử dụng RestKit để quản lý các dịch vụ web của mình, việc này trở nên dễ dàng hơn. Câu trả lời trên bài đăng này cho thấy cách sử dụng trình phân tích cú pháp JSON của RestKit để ánh xạ từ JSON tới đối tượng của bạn.

Deserializing local NSString of JSON into objects via RestKit (no network download)

+0

rất đẹp, tôi sẽ sử dụng cách tiếp cận này trong dự án của tôi, cảm ơn! :-) – kernix

Các vấn đề liên quan