В настоящее время я работаю с SpriteKit на Xcode 7 и ios 9, и я обнаружил, что предлагаемый метод URLByAppendingPathComponent для доступа к локальным URL-адресам для файлов с комбинацией с archiveRootObject не сохраняет объект в папке назначения, а в папке «Данные». Вот кодURLByAppendingPathComponent с archiveRootObject не работает правильно?
func saveData(){
let objectToSave = SomeObject()
let docPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
let path = NSURL(string: docPath)
let fp = path?.URLByAppendingPathComponent("savedObject.data")
if NSKeyedArchiver.archiveRootObject(objectToSave, toFile: String(fp)) {
print("Success writing to file!")
} else {
print("Unable to write to file!")
}
}
Это, однако, сохраните данные, но в папке «Данные» рядом с папкой Bundle. (Хотя я не тестировал его на реальном устройстве).
В отладчике константа fp держит правильную строку NSURL, поэтому я просто просто не понимаю, что я делаю неправильно.
Однако, используя let fp = docPath + "/savedObject.data"
, а затем в функции archiveRootObject сохраняет объект в правильном месте, хотя в отладчике строки идентичны.
Мой вопрос: может кто-нибудь, пожалуйста, объясните мне, что не так с первым подходом?
'fp' является' NSURL'. Используйте метод «путь», чтобы получить URL-адрес в качестве пути к файлу. – rmaddy
Спасибо за ответ. Я знаю, что 'fp' является' NSURL', но не конвертируется в строку в 'String()' метод? В любом случае, не могли бы вы быть более конкретными, как достичь этого? Я все еще немного новичок в быстром, поэтому понимание этого поможет мне. – darksoul99
Замените 'String (fp)' на 'ftp.path'. (Я думаю, что это правильно, я больше Objective-C, чем Swift). – rmaddy