Niedawno jestem starszym w liceum i jestem zainteresowany tworzeniem aplikacji na iPhone'a. Niedawno ukazała się jedna z moich aplikacji: NBlock. Jest to aplikacja do układania puzzli i jest bardzo trudna. Ma jednak kilka problemów. Najlepsze wyniki nie są zapisywane. Powiedziano mi, żebym używał plistu. Jakieś wskazówki?Jak korzystać z pList w programowaniu na iOS
Odpowiedz
Metoda URL oparty na to:
// 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];
Dla mnie wydaje się dużo czystsze i bardziej przejrzyste, aby użyć '- [NSURL URLByAppendingPathComponent:]' dla adresów URL plików zamiast względnego adresu URL. Pozwoliłoby to na uniknięcie potrzeby ucieczki ścieżki procentowej i generalnie mniej podatne na błędy. –
Unikałbym używania plist. Najłatwiejszym sposobem na zapisanie prostych danych w aplikacji jest zdecydowanie NSUserDefaults
.
Zapoznaj się z this tutorial, aby uzyskać prosty przewodnik na temat korzystania z NSUserDefaults
. Zawsze pamiętaj, aby synchronize
NSUserDefaults
po zakończeniu pisania do nich.
Jeśli szukasz bardziej wydajnego (ale bardziej złożonego) sposobu na zapisywanie danych, zapoznaj się z przewodnikiem Apple'a dotyczącym używania Core Data
.
Myślałem, że NSUserDefaults był zalecany dla standardowych ustawień domyślnych, które chcesz zachować związane z preferencjami językowymi i tym podobne? – cheznead
Zajrzyj do NSKeyedArchiver/Unarchiver. Możesz zapisać prawie wszystko, co chcesz; NSUserDefaults, z mojego doświadczenia, zrzuca twoje dane, jeśli zabijesz swoją aplikację z zasobnika. Dane podstawowe są lepiej używane, jeśli zarządzasz dużymi ilościami danych za pomocą baz danych, takich jak sqlite.
Nigdy nie miałem tego problemu z poprawnie 'synchronize'd' NSUserDefaults'. – mopsled
Zajmę się tym, dzięki. NSUserDefaults jest naprawdę dobry tylko wtedy, gdy po prostu zapisujesz prosty ciąg lub coś podobnego (domyślam się, że pytający może być dobrym kandydatem), o ile można go trwale zapisać. –
Sprawdź link dodany w mojej odpowiedzi, aby zobaczyć, jak sobie z tym poradzić. – mopsled
Herezje co chcesz:
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];
i dodanie nowych zdobywa zrobić initWithContentsOfFile:@"scores.plist"
zamiast init
w deklaracji array
. Możesz opcjonalnie użyć NSUserDefaults.
powiedziałbym poniższy kod działa i całkiem prosto do przodu, chyba typów danych obiekt niestandardowy (jego inna historia ponownie) stosowane są:
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];
}
}
Ustawienie atrybutu daty może być pomocne w sprawdzeniu, kiedy jest ostatnio aktualizowany wynik.
- 1. Jak odczytać tablicę z iOS plist
- 2. Szyfruj/odszyfruj plik .plist ios
- 3. Jak korzystać z funkcji "otwórz w ..." w aplikacji na iOS?
- 4. Konwertuj plik JSON na .plist
- 5. Jak korzystać z UImageAsset w iOS 8
- 6. Jak korzystać z MQTT w systemie iOS?
- 7. Jak prawidłowo korzystać z narzędzia CFNotificationCenterAddObserver w Swift na iOS
- 8. Jak korzystać z usługi PositionService w Gluon Mobile na iOS?
- 9. Jak korzystać z WebView na xcode 4.5.1
- 10. Zapisz NSDictionary na plist
- 11. iOS: Jak korzystać MPMoviePlayerController
- 12. Jak włączyć funkcję latarki w telefonie iPhone 4 iOS 6 na początku aplikacji z preferencjami plist
- 13. Jak korzystać z interfejsu API YouTube dla aplikacji na iOS?
- 14. Ładowanie NSDictionary z Plist na liście
- 15. iOS Jak korzystać z prywatnego interfejsu API?
- 16. Jak korzystać z setKeepAliveTimeout: handler - IOS?
- 17. Jak korzystać z NSTrackingArea
- 18. Instalowanie aplikacji iOS z lokalnego pliku plist (null) chce zainstalować
- 19. Sposób wstrzymywania czasu w programowaniu w systemie iOS
- 20. Jak zapisać dane w plist?
- 21. Praca z danymi w aplikacjach na iOS (co wybrać: NSData, CoreData, sqlite, PList, NSUserDefaults)
- 22. Jak korzystać z OpenCL na Androida?
- 23. Kowariancja w programowaniu na poziomie typu
- 24. Jak wydrukować ciąg z plist bez "Opcjonalnie"?
- 25. Mutowalność w programowaniu funkcjonalnym
- 26. Jak korzystać z widoku kontenera w systemie iOS?
- 27. Tworzenie własnego rozszerzenia pliku na podstawie plist
- 28. Jak korzystać z programu pjsip w moim własnym projekcie iOS?
- 29. Odczytywanie danych z pliku plist
- 30. Jak korzystać z FLAC w aplikacji na iPhone'a?
Możesz zacząć od przeczytania [samouczek plist Apple] (http://developer.apple.com/library/mac/documentation/Cocoa/Conoa/PublicLists/QuickStartPlist/QuickStartPlist.html). – Jon7