2016-01-22 3 views
5

Ich möchte Bilder in der Benutzerdomäne des iPhone speichern, daher schreibe ich den folgenden Code.Anwendungs-ID von NSSearchPathForDirectoriesInDomains Änderungen pro Simulator Ausführen und Aktualisieren der App auf einem echten Gerät

let path = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] 
print(path) 

Es zeigt wie: /Users/xxx/Library/Developer/CoreSimulator/Devices/1312F880-6BDC-45D2-B3B3-4D2374313C67/data/Containers/Data/Application/A2850237-5E71-4373-81A6-B443032E1951/Documents/

In diesem Fall ID Anwendung ist A2850237-5E71-4373-81A6-B443032E1951

Und das Problem ist, wenn ich auf Simulator laufen wieder OHNE DIE APP AUSBAU es zeigt wie: /Users/xxx/Library/Developer/CoreSimulator/Devices/1312F880-6BDC-45D2-B3B3-4D2374313C67/data/Containers/Data/Application/1F9B5B0A-5A6C-4098-BF40-C978C60C93AF/Documents/

In diesem Fall ist die Anwendungs-ID 1F9B5B0A-5A6C-4098-BF40-C978C60C93AF

Also dort sind Application ID Unterschiede zwischen der vorherigen und aktuellen Installation, obwohl ich gerade die App aktualisiert und die App nicht entfernt habe. Warum es verursacht wird und wie man es repariert?

Es verursacht Xcode 7.2, 7.1, 7.0. Und es verursacht mit nicht nur Simulator-Installation, sondern auch tatsächliche Geräteinstallation. Wenn also iOS-Nutzer die App aus dem App Store aktualisieren, wird die Anwendungs-ID geändert und die App-Sandbox wird ebenfalls geändert. Schließlich können Nutzer ihre Bilder nicht weiterleiten.

ähnlichen Situationen:

Verwandte Richtlinien:

Vielen Dank im Voraus.

EDIT

Es scheint, ich relativen Pfad als nicht absolut bestehen habe.

Ich werde den Ansatz versuchen und wenn ich mein Problem gelöst, werde ich die Frage aktualisieren.

+0

Mögliche Duplikate von [Xcode, Ändern von Anwendungen Unterordner?] (Http://stackoverflow.com/questions/2464832/xcode-change-applications-subfolder) – Moritz

+0

Ich kann Application ID Änderungen verstehen, wenn ich neu installiere (entfernen Sie die vorhandene App und installiere die App erneut) die App. In diesem Fall ändert sich die Anwendungs-ID jedoch, wenn ich die App aktualisiere (NICHT die vorhandene App entferne und die App erneut installiere). Wenn sich der Dateicontainer durch Aktualisieren der App ändert, wie kann ich persistente Daten in der Benutzerdomäne über die nächste Version behalten? – bekkou68

Antwort

2

Ich habe Pfad relativ nicht absolut beharren. Und ich kann auch alte Laufbilder retten, indem ich mit NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] + "persisted relative path" hole.

-1

versuchen, Ihre Datei einfach mit dem name.extension

anhalten Dokument

let pathDocument = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] 
let fullPath = let fullPath = pathDocument+"/"+"fileName.ext" 
//...add some code to save document at `fullPath`... 

zu bekommen Dokument

let pathDocument = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] 
let fullPath = let fullPath = pathDocument+"/"+"fileName.ext" 
//... add code to get data at path : `fullPath`.... 
0

Eine bessere Lösung ein Lesezeichen Daten zu speichern, speichern https://developer.apple.com/library/ios/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/AccessingFilesandDirectories/AccessingFilesandDirectories.html

Ein Lesezeichen ist eine undurchsichtige Datenstruktur, eingeschlossen in einem NSData-Objekt, , das den Speicherort einer Datei beschreibt.Während Weg- und Datei Referenz-URLs sind potenziell fragile zwischen Starts Ihrer App, ein Lesezeichen können in der Regel verwendet werden, um neu zu erstellen eine URL zu einer Datei auch in Fällen, in denen die Datei verschoben oder umbenannt wurde

zuerst müssen Sie NSURL anstelle von String

Konvertieren eines NSURL zu NSData

let data: NSData? = try? url.bookmarkDataWithOptions(.SuitableForBookmarkFile, includingResourceValuesForKeys: nil, relativeToURL: nil) 

ein NSURL Lesen von Lesezeichen NSData

var isStale: ObjCBool = false 
    let url = try? NSURL(
     byResolvingBookmarkData: bookData, 
     options: [], 
     relativeToURL: nil, 
     bookmarkDataIsStale: &isStale) 
    guard let fullURL = url else { 
     return nil 
    } 

Sie können relativeToURL zu Ihrem Dokumentenverzeichnis url füllen

Alternativ können Sie FileKit verwenden: path.bookmarkData und Path(bookmarkData: ..)

Verwandte Themen