Tôi đang phát triển một ứng dụng mà tôi muốn sử dụng một số NSDictionary
. Bất cứ ai có thể xin vui lòng gửi cho tôi một mã mẫu giải thích các thủ tục làm thế nào để sử dụng một NSDictionary
để lưu trữ dữ liệu với một ví dụ hoàn hảo?Làm thế nào chúng ta có thể lưu trữ vào một NSDictionary? Sự khác biệt giữa NSDictionary và NSMutableDictionary là gì?
Trả lời
Tài liệu NSDictionary và NSMutableDictionary có lẽ là lựa chọn tốt nhất của bạn. Họ thậm chí có một số ví dụ tuyệt vời về cách làm những việc khác nhau, giống như ...
... tạo ra một NSDictionary
NSArray *keys = [NSArray arrayWithObjects:@"key1", @"key2", nil];
NSArray *objects = [NSArray arrayWithObjects:@"value1", @"value2", nil];
NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:objects
forKeys:keys];
... lặp trên nó
for (id key in dictionary) {
NSLog(@"key: %@, value: %@", key, [dictionary objectForKey:key]);
}
... làm cho nó có thể biến đổi
NSMutableDictionary *mutableDict = [dictionary mutableCopy];
Lưu ý: phiên bản lịch sử trước năm 2010: [[Từ điển mutableCopy] autorelease]
... và thay đổi nó
[mutableDict setObject:@"value3" forKey:@"key3"];
... sau đó lưu nó vào một tập tin
[mutableDict writeToFile:@"path/to/file" atomically:YES];
... và đọc lại aga trong
NSMutableDictionary *anotherDict = [NSMutableDictionary dictionaryWithContentsOfFile:@"path/to/file"];
... đọc một giá trị
NSString *x = [anotherDict objectForKey:@"key1"];
... kiểm tra xem một chìa khóa tồn tại
if ([anotherDict objectForKey:@"key999"] == nil) NSLog(@"that key is not there");
... sử dụng đáng sợ tương lai cú pháp
Từ năm 2014, bạn có thể thực sự chỉ cần gõ dict [@ "chìa khóa"] chứ không phải [dict objectForKey: @ "chìa khóa"]
NSDictionary *dict = [NSDictionary dictionaryWithObject: @"String" forKey: @"Test"];
NSMutableDictionary *anotherDict = [NSMutableDictionary dictionary];
[anotherDict setObject: dict forKey: "sub-dictionary-key"];
[anotherDict setObject: @"Another String" forKey: @"another test"];
NSLog(@"Dictionary: %@, Mutable Dictionary: %@", dict, anotherDict);
// now we can save these to a file
NSString *savePath = [@"~/Documents/Saved.data" stringByExpandingTildeInPath];
[anotherDict writeToFile: savePath atomically: YES];
//and restore them
NSMutableDictionary *restored = [NSDictionary dictionaryWithContentsOfFile: savePath];
Giải thích tốt. Nó rất hữu ích .. –
@Ben Gottlieb Phần một: Cảm ơn lời giải thích tốt đẹp. Trên thực tế tôi muốn lưu hai dữ liệu UItextField của tôi trong một tệp từ MutableDictionary. Ở đây bạn đã viết 'NSString * savePath = [@" ~/Documents/Saved.data "stringByExpandingTildeInPath];', bây giờ câu hỏi của tôi là, tập tin 'Saved.data' ở đây là gì? Làm sao tôi có thể làm được? – Tulon
@Ben Gottlieb Phần thứ hai: Và trong trường hợp của tôi, tôi đặt một tệp văn bản (.rtf) vào thư mục sau đây 'Hỗ trợ tệp> MediaFiles> Tài liệu> userData.rtf'Bây giờ tôi có thể lưu các loại dữ liệu Mutabledictionary này trong tệp văn bản ? Và những gì sẽ là thư mục hoàn hảo trong trường hợp này? Tôi đã cố gắng với điều này '[userData writeToFile: @" MediaFiles/Documents/userData.rtf "atomically: YES];' & with this '[userData writeToFile: @" Documents/userData.rtf "atomically: YES];', but không hoạt động. Chúc một ngày tốt lành. – Tulon
Sự khác biệt chính: NSMutableDictionary thể được sửa đổi tại chỗ, NSDictionary không thể. Điều này đúng với tất cả các lớp NSMutable * khác trong Cocoa. NSMutableDictionary là một lớp con của NSDictionary, vì vậy mọi thứ bạn có thể làm với NSDictionary bạn có thể làm với cả hai. Tuy nhiên, NSMutableDictionary cũng thêm các phương thức bổ sung để sửa đổi mọi thứ tại chỗ, chẳng hạn như phương thức setObject:forKey:
.
Bạn có thể chuyển đổi giữa hai như thế này:
NSMutableDictionary *mutable = [[dict mutableCopy] autorelease];
NSDictionary *dict = [[mutable copy] autorelease];
Có lẽ bạn muốn để lưu trữ dữ liệu bằng cách viết nó vào một tập tin.NSDictionary có một phương pháp để làm điều này (mà cũng làm việc với NSMutableDictionary):
BOOL success = [dict writeToFile:@"/file/path" atomically:YES];
Để đọc một cuốn từ điển từ một tập tin, có một phương pháp tương ứng:
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:@"/file/path"];
Nếu bạn muốn đọc nội dung tập tin một NSMutableDictionary, chỉ cần sử dụng:
NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithContentsOfFile:@"/file/path"];
Cảm ơn bạn đã trả lời ... –
- 1. Lưu NSDictionary vào NSUserDefaults
- 2. Thêm NSDictionary vào NSDictionary
- 3. Thêm vào các mục nhập NSDictionary vào NSMutableDictionary
- 4. NSDictionary không lưu trữ đúng CGRect?
- 5. làm thế nào để lưu trữ NSDictionary trong NSUserdefaults và làm thế nào tôi có thể lấy từ nó
- 6. Làm thế nào để lưu trữ một NSArray trong một NSDictionary?
- 7. Lưu NSDictionary thành plist
- 8. Lưu trữ một mảng float C trong một NSDictionary
- 9. là những gì khác biệt giữa có thể thay đổi và bất biến
- 10. NSDictionary setValue:
- 11. sự khác biệt giữa kho svn rùa và kho lưu trữ svn trực quan là gì?
- 12. chèn NSDictionary vào CoreData
- 13. Sự khác biệt chức năng giữa một cá thể và một đối tượng là gì?
- 14. Nhận sự khác biệt giữa hai kho lưu trữ
- 15. Làm cách nào để có được thứ tự Ban đầu của NSDictionary/NSMutableDictionary?
- 16. Sự khác biệt giữa nghỉ và thoát là gì?
- 17. Sự khác biệt giữa ASP.NET và ASP.NET MVC là gì?
- 18. Sự khác nhau giữa kho lưu trữ và sự phụ thuộc trong Maven là gì?
- 19. Sự khác biệt giữa while (true) và loop là gì?
- 20. Sự khác biệt giữa dữ liệu có thể biến đổi và nhị phân là gì
- 21. Sự khác biệt giữa Caching và Memoization là gì?
- 22. Dữ liệu NSDictionary và Core
- 23. Sự khác biệt giữa lưu và save_model()
- 24. Sự khác biệt giữa khẳng định và static_assert là gì?
- 25. khối trong nsdictionary?
- 26. Sự khác biệt giữa gói android.opengl và javax.microedition.khronos.opengles là gì?
- 27. cách lưu trữ NSDictionary dưới dạng thuộc tính có thể biến đổi trong dữ liệu lõi
- 28. Là objectForKey chậm cho NSDictionary lớn?
- 29. Các khóa trong NSDictionary có thể được sao chép?
- 30. Làm thế nào để tạo một NSDictionary với nhiều phím?
Bạn có thể bắt đầu bằng cách xem xét các tài liệu NSDictionary ... – stefanB
các RTFMs lịch sự bằng cách nào đó có vẻ nhiều hơn ăn da hơn so với những người rõ ràng. –
@stefanB Đối với rất nhiều lập trình viên mới, tài liệu chính thức thường rất phức tạp và khó hiểu vì vậy một cái nhìn cơ bản về _x_ trên SO giúp đỡ. –