web-dev-qa-db-ja.com

IOSエディタのバグ。archivedDataの名前が変更されました

私を助けてください!ループで立ち往生し、自分の道を見つけることができません。私はIOS仕事のためのプログラミングを学びたいので、私は彼らのチュートリアルアプリ、食事リストアプリケーションから始めようと思いました。私はあなたが永続的なデータの保存を開始することになっているところにいますエディターでループが止まることはありません。コード行があります...

let isSuccessfulSave = NSKeyedArchiver.archiveRootObject(meals, toFile: Meal.ArchiveURL.path)

それは私に言う警告を与えます...

'archiveRootObject(_:toFile :)'はiOS 12.0で廃止されました:代わりに+ archivedDataWithRootObject:requiringSecureCoding:error:を使用してください

OK、コード行を次のように変更します...

let isSuccessfulSave = NSKeyedArchiver.archivedDataWithRootObject(meals)

それから私に警告を与えます...

「archivedDataWithRootObject」は「archivedData(withRootObject :)」に名前が変更されました

OK、コード行を次のように変更します...

let isSuccessfulSave = NSKeyedArchiver.archivedData(withRootObject: meals)

これは...

'archivedData(withRootObject :)'はiOS 12.0で廃止されました:代わりに+ archivedDataWithRootObject:requiringSecureCoding:error:を使用してください

OK ...だから... archivedDataは非推奨であり、archivedDataWithRootObjectを使用する必要がありますが、archivedDataWithRootObjectの使用はarchivedDataに名前が変更されましたが、archivedDataは非推奨なので、archivedDataに名前が変更されたarchivedDataを使用してください。

私は開発者ドキュメントを調べてみましたが、同じことを教えてくれます。1つは廃止されており、リンクや何もありません。googleを検索すると、それらのいずれかを使用する構文を示す一連のページが表示されます。私はまだIOSプログラミングにまだ慣れておらず、非推奨のこの無限ループから、名前を変更して非推奨に変更する方法...

助けてください、私は道に迷ってしまい、続行する方法がわかりません。ありがとうございました。

5

IOS 12の一般的なソリューションは次のとおりです。

class SettingsArchiver {
    static func setData(_ value: Any, key: String) {
        let ud = UserDefaults.standard
        let archivedPool = try? NSKeyedArchiver.archivedData(withRootObject: value, requiringSecureCoding: true)
        ud.set(archivedPool, forKey: key)
    }

    static func getData<T>(key: String) -> T? {
        let ud = UserDefaults.standard
        if let val = ud.value(forKey: key) as? Data,
            let obj = try? NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(val) as? T {
            return obj
        }
        return nil
    }
}
1
Ani Farsh