2011-06-10 32 views
13

Tôi đang sử dụng mã được tìm thấy trong bài đăng này: Mulitple Arrays From Plist, với cùng định dạng plist.Lưu NSDictionary thành plist

Thao tác này thành công, tuy nhiên tôi không biết cách lưu các mảng được tạo trở lại thành dạng plist, có cùng định dạng.

Làm cách nào để đạt được điều này?

EDIT: Nó không phải là quá nhiều tiết kiệm mà tôi cần, nhưng sự hình thành của dữ liệu để tiết kiệm.
Plist là một loạt các từ điển có chuỗi và các khóa tương ứng của chúng. Tất cả các chuỗi với một khóa nhất định được đưa vào một mảng riêng của chúng.

Làm cách nào để đưa mảng đó trở lại vị trí chính xác trong mảng từ điển, sẵn sàng lưu?

Trả lời

14

Đừng quên tạo myPlistFile.plist và thêm nó vào thư mục tài nguyên ứng dụng của bạn.

NSError *error; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 

bạn có thể quét đường dẫn tại đây và tìm kiếm myPlistFile.plist sử dụng vòng lặp.

NSString *plistPath = [documentsDirectory stringByAppendingPathComponent:@"myPlistFile.plist"]; 
if (![[NSFileManager defaultManager] fileExistsAtPath: plistPath]) 
{ 
      NSString *bundle = [[NSBundle mainBundle] pathForResource:@"myPlistFile" ofType:@"plist"]; 
      [[NSFileManager defaultManager] copyItemAtPath:bundle toPath:plistPath error:&error]; 
} 
[myDict writeToFile:plistPath atomically: YES]; 
+1

điều này sẽ không hoạt động vì mainBundle là chỉ đọc –

+0

@Ashley Staggs: Kiểm tra câu trả lời được cập nhật. – Jhaliya

+0

tôi biết nơi tôi sẽ lưu nó, nhưng đó là sự hình thành mà tôi cần để có được quyền –

22

Dưới đây là cách đơn giản nhất:

NSDictionary* dict = ...; 
[dict writeToFile:@"..." atomically:YES]; 

Xem tài liệu cho -writeToFile:atomically:.

+0

Tôi biết rằng điều này sẽ lưu các tập tin, nhưng tôi không nghĩ rằng đây sẽ biến các mảng hình thành từ các Plist trở lại cùng một cách của mảng-> dictionary-> string –

+6

Bạn đã thử nó chưa? Nó có thể viết cho một plist bất cứ điều gì có thể được đọc từ một plist. Trừ khi bạn đã thay đổi cách bạn đặt hàng dữ liệu trong từ điển, nó sẽ được viết chính xác theo cùng một cách. –

+1

** Quan trọng nhất ** - Phương pháp này đệ quy xác nhận rằng tất cả các đối tượng chứa là đối tượng danh sách thuộc tính (các thể hiện của 'NSData',' NSDate', 'NSNumber',' NSString', 'NSArray', hoặc' NSDictionary') trước khi ghi ra tệp và trả về 'NO' nếu tất cả các đối tượng không phải là đối tượng danh sách thuộc tính, vì tệp kết quả sẽ không phải là danh sách thuộc tính hợp lệ. – enadun

0

Và ngược lại, để tải một NSDictionary TỪ một tập tin:

+ (id)dictionaryWithContentsOfFile:(NSString *)path;