[解決済み] NSCodingを使用したSwiftのカスタムクラスをUserDefaultsに保存する
2023-06-15 01:42:47
質問
私は現在、NSUserDefaults にカスタム Swift クラスを保存しようとしています。以下は、私のプレイグラウンドからのコードです。
import Foundation
class Blog : NSObject, NSCoding {
var blogName: String?
override init() {}
required init(coder aDecoder: NSCoder) {
if let blogName = aDecoder.decodeObjectForKey("blogName") as? String {
self.blogName = blogName
}
}
func encodeWithCoder(aCoder: NSCoder) {
if let blogName = self.blogName {
aCoder.encodeObject(blogName, forKey: "blogName")
}
}
}
var blog = Blog()
blog.blogName = "My Blog"
let ud = NSUserDefaults.standardUserDefaults()
ud.setObject(blog, forKey: "blog")
このコードを実行すると、次のようなエラーが発生します。
実行は中断されました、理由はシグナルSIGABRTです。
は、最後の行の (
ud.setObject
...)
同じコードで、アプリ内で以下のようなメッセージを表示するとクラッシュします。
"プロパティリストのフォーマットが無効です。200 (プロパティ リストには オブジェクトを含むことができません)。
どなたか助けていただけませんか。私はMaverick上でXcode 6.0.1を使用しています。ありがとうございます。
どのように解決するのですか?
dan-beaulieuが提案したように、私は自分自身の質問に答えました。
これが今動いているコードです。
注:クラス名の分離は、コードがPlaygroundsで動作するために必要ではありませんでした。
import Foundation
class Blog : NSObject, NSCoding {
var blogName: String?
override init() {}
required init(coder aDecoder: NSCoder) {
if let blogName = aDecoder.decodeObjectForKey("blogName") as? String {
self.blogName = blogName
}
}
func encodeWithCoder(aCoder: NSCoder) {
if let blogName = self.blogName {
aCoder.encodeObject(blogName, forKey: "blogName")
}
}
}
let ud = NSUserDefaults.standardUserDefaults()
var blog = Blog()
blog.blogName = "My Blog"
ud.setObject(NSKeyedArchiver.archivedDataWithRootObject(blog), forKey: "blog")
if let data = ud.objectForKey("blog") as? NSData {
let unarc = NSKeyedUnarchiver(forReadingWithData: data)
let newBlog = unarc.decodeObjectForKey("root") as Blog
}
関連
-
[解決済み] Swiftでindexとelementでループを反復させる方法
-
[解決済み] Swift カスタムオブジェクトの配列をプロパティ値でソートする方法
-
[解決済み] Swift で UserDefaults を使用するにはどうすればよいですか?
-
[解決済み] Swift: switch ケースでオプションの値に対するテストを行う
-
[解決済み] swiftでオプションのクロージャを作るにはどうしたらいいですか?
-
[解決済み] SwiftUI のテキストのフォントサイズをカスタマイズする
-
[解決済み] XcodeでFirebase Analyticsをオンにする
-
[解決済み] YクラスのオブジェクトXはSwiftでmethodSignatureForSelectorを実装していない
-
[解決済み] Swiftのインライン条件?
-
[解決済み] rootViewControllerとアニメーションを入れ替える?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Swiftダブルからストリング
-
[解決済み] ビルド入力ファイルが見つかりません」Swift 4.2、Xcode 10.0
-
[解決済み] Swift: switch ケースでオプションの値に対するテストを行う
-
[解決済み] Swiftでenumの関連値を無視して比較する方法は?
-
[解決済み] SHA256 in swift
-
[解決済み] Swift- Remove Push Notification Badge number?
-
[解決済み] SwiftUIのDSLを可能にするものは何ですか?
-
[解決済み] XcodeでFirebase Analyticsをオンにする
-
[解決済み] Swiftの定数。構造体か列挙型か
-
[解決済み] Swiftのコード実行をベンチマークするには?