前提
CoreDataのAttributeに配列を登録しようとしています。
登録するところまではできているようですが、登録した配列をどうやって使うのかが分かりません。
実現したいこと
上のスクリーンショットの通り、ItemというEntityのなかのwordArrayというAttributeに、Stringの配列を登録したいと考えています。そして、その配列を取り出して使えるようにしたいです。
試したこと
先程のスクリーンショットの通り、wordArrayのTypeをTransformableに設定し、TransformerをNSSecureUnarchiveFromDataTransformerNameとしました。
これは、
https://qiita.com/gonsee/items/a61792aa04ba53b7fa1a
に記載されていた通りに行ったことです。
Swift
1private func addItem(_ array: [String]) { 2 let newitem = Item(context: context) 3 newitem.wordArray = array as NSObject 4 newitem.index = Int16(items.count + 1) 5 6 7 do { 8 try context.save() 9 } catch { 10 let nsError = error as NSError 11 fatalError("Unresolved error \(nsError), \(nsError.userInfo)") 12 } 13 14 } 15
以上のようにaddItemを設定し、addItem([String])で言葉の配列をCoreDataに登録できるようにしました。 "as NSObject"は、これを付けるように警告が出たため、fixを押して付け加えられたものです。
試しに[apple, banana]という配列と[red, blue, yellow]という配列を登録しました。
Swift
1struct ContentView: View { 2 @Environment(\.managedObjectContext) private var context 3 @FetchRequest( 4 sortDescriptors: [NSSortDescriptor(keyPath: \Item.index, ascending: true)], 5 animation: .default) 6 private var items: FetchedResults<Item> 7 var body: some View { 8 HStack{ 9 VStack{ 10 Button("表示"){ 11 print(items) 12 }
このようにCoreDataの中身を取得し、ボタンを押して中身をprintさせたところ、
data: {
index = 1;
wordArray = "(\n apple,\n banana\n)";
}
data: {
index = 2;
wordArray = "(\n red,\n yellow,\n blue\n)";
}
と表示され、やはり配列の登録はできているようです。
発生している問題・エラーメッセージ
ボタンを押すと最初のデータのwordArrayの要素数をprintできるように
Swift
1Button("表示"){ 2 print(items[0].wordArray.count) 3}
と設定したところ、
Cannot convert value of type 'Int' to expected argument type 'Range<FetchedResults<Item>.Index>' (aka 'Range<Int>')
と
Value of type 'Slice<FetchedResults<Item>>' has no member 'wordArray'
というエラーメッセージが表示されました。
要素数以外にも、配列の最初の言葉を取得するためにitems[0].wordArray[0]をプリントしようとしても同様のエラーが表示されました。
items[0].wordArrayを通常の配列として扱えていないということでしょうか。
items[0].wordArrayの型をプリントさせたところ、Optional<NSObject>と表示されました。これを[String]に変換できれば良いのかなと考えていますが、その方法が分からずどうにもならなくなり質問させていただきました。
アドバイスよろしくお願いいたします。
・以上の通り配列の登録はできていますが、この登録方法にこだわりはありません。配列を登録し、それを使うことができればどのような方法でも良いので教えていただければ嬉しいです。
・「〇〇で検索すると良いかもしれない」などの情報もいただけると幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/08/22 14:39