2011-11-18 20 views
33

W aplikacji C# zawsze używałem pliku app.config, aby zapisać niektóre dane do mojej aplikacji, aby załadować w razie potrzeby (np. Ciąg połączenia).Plik konfiguracyjny aplikacji iOS

Jaki jest najlepszy sposób zapisywania takich informacji w aplikacji na iOS?

Odpowiedz

57

Można utworzyć plik listy właściwości (jest szablon, który w Xcode, po prostu do Plik -> Nowy plik i tam wybierz), więc będziesz miał coś w stylu "settings.plist", lub coś w tym stylu. Możesz myśleć o plist jako o pliku klucza => wartości, z tą różnicą, że możesz również przechowywać tablice i słowniki, oprócz zwykłego tekstu jako wartości.

Zastosowanie NSBundle załadować plik w aplikacji, jak

NSString *path = [[NSBundle mainBundle] pathForResource:@"settings" ofType:@"plist"]; 
NSDictionary *settings = [[NSDictionary alloc] initWithContentsOfFile:path]; 

Następnie można uzyskać dostęp do kluczy jako zwykłego słownika. Po prostu nie zapomnij [zwolnij] go po;).

+2

Jeśli fr33d0m jest nowy, prawdopodobnie używa iOS 5, który domyślnie używa ARC (automatyczne liczenie odwołań), jeśli tak jest, nie wypuszczaj niczego. –

+0

Tak, użyję iOS 5. Dzięki. – Freedom

+0

Tak, dziękuję za pamięć o ARC, Sergio. –

2

W iOS każda aplikacja ma własną piaskownicę, która będzie dostępna tylko dla tej aplikacji. Więc jeśli chcesz, aby ten plik był tylko do odczytu, zapisz go w Pakiecie aplikacji. zapisz w folderze aplikacji.

Nie można uzyskać bezpośredniego dostępu do folderu aplikacji Więc jeśli chcesz zapisać plik do tego folderu, musisz to zrobić programowo.

4

Jeśli dopiero przechowywania stosunkowo prosty zestaw rzeczy konfiguracyjnej możesz po prostu użyć metody serializacji NSDictionary „s (nie wiem jak połączyć do katalogu metod w klasie doc):

NSString *settingsPath = [@"~/pathtoconfig.plist" stringByExpandingTildeInPath]; 

NSMutableDictionary *settings = [NSMutableDictionary dictionary]; 
if([[NSFileManager defaultManager] fileExistsAtPath:settingsPath]){ 
    settings = [NSMutableDictionary dictionaryWithContentsOfFile:settingsPath]; 
} 

// writing settings 
[settings writeToFile:settingsPath atomically:YES]; 

Ponieważ nie wiem jak ty są z obiektywem c, będę również pamiętać:

+1

System iOS 5 wykonuje automatyczne liczenie odwołań i jest domyślnie włączony w Xcode. –

+0

Prawda, zapomniałem o tym, chociaż nie jest idealnie. IIRC, będziesz musiał postępować zgodnie ze standardami kodowania, a cykliczne zależności nadal będą działać. – Jeff

10

Dla małych bitów danych, takich jak ciąg połączenia, użyłbym NSUserDefaults.

Gdy chcesz zapisać ciąg połączenia, można to zrobić:

[[NSUserDefaults standardUserDefaults] setObject:myConnectionString 
              forKey:@"connectionString"]; 

Gdy chcesz go załadować, można to zrobić:

Plik
myConnectionString = [[NSUserDefaults standardUserDefaults] 
          stringForKey:@"connectionString"]; 
+4

Przy NSUserDefaults, po pierwszym zapisaniu pliku potrzebuję uruchomić aplikację. Moim celem jest posiadanie pliku, w którym mogę edytować zawartość w zwykłym edytorze, bez konieczności uruchamiania aplikacji (prawdopodobnie chcę to zrobić, ponieważ jestem przyzwyczajony do app.config w systemie Windows). Dzięki i tak ... – Freedom

2

konfiguracji aplikacji iOS w Swift z iOS 8.3:

let path: String = NSBundle.mainBundle().pathForResource("Info", ofType: "plist")! 
    let nsDictionaryInfoPlist: NSDictionary = NSDictionary(contentsOfFile: path)! 

    // Usage example: Google Maps iOS SDK/API Configuration. 
    GMSServices.provideAPIKey(nsDictionaryInfoPlist.objectForKey("GoogleMapsiOSAPIKey") as! String) 
0

Zdaję sobie sprawę, że jestem późno do partii, ale po znalezieniu tego przepełnienie stosu byłem zniechęcony w przyjętym odpowiedź, więc created a pod go rozwiązać! Opiera się to na pomyśle z @ RafaelSteil's answer, ale ma prostszy interfejs, buforuje załadowane dane konfiguracyjne i obsługuje pods oferujące własne ustawienia domyślne, które mogą być przesłonięte przez główną aplikację. Mam nadzieję, że to pomoże komuś.

0

Aktualizacja dla Swift 3 Xcode 8

Dodaj nową listę nieruchomości do projektu o nazwie "Sample.plist". Następnie zobacz poniższy przykład.

let path: String = Bundle.main.path(forResource: "Sample", ofType: "plist")! 
    let sampleConf: NSDictionary = NSDictionary(contentsOfFile: path)! 
    print(sampleConf.object(forKey: "test") as! String) 
Powiązane problemy