Gần đây, tôi là một học sinh trung học phổ thông và tôi quan tâm đến việc tạo ứng dụng cho iPhone. Gần đây, một trong các ứng dụng của tôi đã xuất hiện: NBlock. Đó là một ứng dụng câu đố và nó rất khó khăn. Tuy nhiên, nó có một vài vấn đề. Điểm số cao không được lưu. Tôi đã được yêu cầu sử dụng một plist. Có lời khuyên nào không?Cách sử dụng pList trong Lập trình iOS
Trả lời
URL phương pháp dựa cho việc này:
// Get the URL for the document directory
NSFileManager *fileManager = [[NSFileManager alloc] init];
NSURL *documentDirectoryURL = [[fileManager URLsForDocumentDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] objectAtIndex:0];
// Turn the filename into a string safe for use in a URL
NSString *safeString = [@"scores.plist" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
// Create an array for the score
NSMutableArray *array = [[NSMutableArray alloc] init];
[array addObject:[NSNumber numberWithInt:score]];
// Write this array to a URL
NSURL *arrayURL = [NSURL URLWithString:safeString relativeToURL:documentDirectoryURL];
[array writeToURL:arrayURL atomically:YES];
Đối với tôi, có vẻ rõ ràng hơn và rõ ràng hơn khi sử dụng '- [NSURL URLByAppendingPathComponent:]' cho URL tệp thay vì URL tương đối. Điều này sẽ loại bỏ sự cần thiết cho phần trăm thoát khỏi đường dẫn và thường ít bị lỗi hơn. –
Tôi muốn tránh sử dụng plist. Cách dễ nhất để lưu dữ liệu đơn giản trong một ứng dụng, cho đến nay, là NSUserDefaults
.
Khám phá this tutorial để biết hướng dẫn đơn giản về cách sử dụng NSUserDefaults
. Luôn chắc chắn là synchronize
NSUserDefaults
khi bạn viết xong cho họ.
Nếu bạn đang tìm kiếm một cách mạnh mẽ hơn (nhưng phức tạp hơn) để lưu dữ liệu, hãy xem hướng dẫn của Apple để sử dụng Core Data
.
Tôi nghĩ NSUserDefaults đã được đề xuất cho các cài đặt mặc định được chuẩn hóa mà bạn muốn tồn tại liên quan đến tùy chọn ngôn ngữ và các tùy chọn tương tự? – cheznead
Hãy xem NSKeyedArchiver/Unarchiver. Bạn có thể tiết kiệm khá nhiều thứ bạn muốn; NSUserDefaults, theo kinh nghiệm của tôi, đổ dữ liệu của bạn nếu bạn giết ứng dụng của bạn từ khay. Dữ liệu cốt lõi thực sự được sử dụng tốt hơn nếu bạn đang quản lý một lượng lớn dữ liệu với các cơ sở dữ liệu như sqlite.
Tôi chưa bao giờ gặp vấn đề đó với 'syncize'd' NSUserDefaults' đúng cách. – mopsled
Tôi sẽ xem xét điều đó, cảm ơn. NSUserDefaults thực sự chỉ tốt nếu bạn chỉ lưu một chuỗi đơn giản hoặc một cái gì đó tương tự (tôi đoán người hỏi có thể là một ứng cử viên tốt), miễn là nó có thể được lưu vĩnh viễn. –
Kiểm tra liên kết tôi đã thêm vào trong câu trả lời của mình để xem cách giải quyết vấn đề đó. – mopsled
Heres những gì bạn muốn:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"scores.plist"];
NSMutableArray *array = [[NSMutableArray alloc] init];
[array addObject:[NSNumber numberWithInt:score]];
[array writeToFile:path atomically:YES];
Và để thêm điểm mới làm initWithContentsOfFile:@"scores.plist"
thay vì init
trong việc kê khai của array
. Bạn có thể tùy ý sử dụng NSUserDefaults.
tôi sẽ nói mã dưới đây sẽ làm việc và khá thẳng về phía trước trừ các kiểu dữ liệu đối tượng tùy chỉnh (một câu chuyện khác nhau của nó một lần nữa) được sử dụng:
NSString* plistPath = nil;
NSFileManager* manager = [NSFileManager defaultManager];
if ((plistPath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"PathTo.plist"]))
{
if ([manager isWritableFileAtPath:plistPath])
{
NSMutableDictionary* infoDict = [NSMutableDictionary dictionaryWithContentsOfFile:plistPath];
[infoDict setObject:@"foo object" forKey:@"fookey"];
[infoDict writeToFile:plistPath atomically:NO];
[manager setAttributes:[NSDictionary dictionaryWithObject:[NSDate date] forKey:NSFileModificationDate] ofItemAtPath:[[NSBundle mainBundle] bundlePath] error:nil];
}
}
đặt thuộc tính ngày có thể hữu ích để kiểm tra khi nào là điểm thời gian cuối cùng được cập nhật.
- 1. Sử dụng lập trình Python cho iOS
- 2. Mã hóa/giải mã tệp .plist ios
- 3. PresentModalViewController trong Storyboard lập trình iOS 5
- 4. lập trình một ứng dụng toàn cầu trong iOS
- 5. iOS - Cách đặt UISwitch theo lập trình
- 6. Cách tạo trình giả lập iOS
- 7. ios giả lập: cách đóng ứng dụng
- 8. Việc sử dụng plist là gì?
- 9. ios lập trình - Lập luận Dữ liệu không được sử dụng bởi định dạng chuỗi
- 10. sử dụng lập trình R trong java
- 11. Làm việc với dữ liệu trong Ứng dụng iOS (Chọn gì? NSData, CoreData, sqlite, PList, NSUserDefaults)
- 12. Lập trình vỏ: Cách sử dụng tìm trong cá?
- 13. Khi nào tôi nên sử dụng UIViewController trong Lập trình IOS?
- 14. Đặt Trình nghe hành động theo lập trình trong IOS
- 15. Cách thức lập trình bằng cách sử dụng F #
- 16. Làm thế nào để đọc Mảng từ iOS plist
- 17. Cách lập trình thêm đăng ký lịch trên iOS?
- 18. Cách sử dụng ECC trong iOS
- 19. Sử dụng lập trình "lập trình C" (Tìm hiểu theo cách thức C)
- 20. Làm trống bộ nhớ cache lập trình trong iOS
- 21. Cách sử dụng 'sử dụng' hoặc 'sử dụng' bằng ngôn ngữ lập trình
- 22. Cài đặt các ứng dụng iOS từ một plist cục bộ (null) muốn cài đặt
- 23. Sử dụng GPU theo cách có lập trình
- 24. Lập trình Asterisk PBX bằng cách sử dụng PHP?
- 25. Cách sử dụng khung Xposed trên trình giả lập Android
- 26. sử dụng emacs để lập trình java
- 27. Lập trình cử chỉ đa chạm có sẵn trong ứng dụng Delphi Firemonkey iOS không?
- 28. Lập trình sử dụng ký tự tab trong .NET?
- 29. keyDispatchingTimedOut khi sử dụng trình giả lập
- 30. Lập trình song song sử dụng GPU trong R
Bạn có thể bắt đầu bằng cách đọc [hướng dẫn plist của apple] (http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/PropertyLists/QuickStartPlist/QuickStartPlist.html). – Jon7