警告
個人の備忘録なので
色々とっ散らかってるがあしからず
前提情報
とあるiPhoneアプリの個人開発を開始した
その前段階として、Webクローリングして
ローカルにデータベースを作成する必要が出てきた
と言うわけで、現在デスクトップWebクローラーアプリを開発中
そこで起きたエラーについてのエントリー
発生したエラーとその対応
コードを書き終わって
実行した際に
@main
の箇所で
Thread 1: Fatal error: UnsafeRawBufferPointer with negative count
が発生
これは
属性の型とオプショナル設定の不一致
が原因
Optionalは属性には
Xcodeのxcdatamodeldの設定から
AttributeのOptionalにきちんとチェックを入れなければならない
「Editor」メニューから「Create NSManagedObject Subclass...」を実行して、クラスを再生成してから再ビルド
すると今度は
'『エンティティ名』' is ambiguous for type lookup in this context
となってしまう
そこで
NSManagedObjectサブクラスを自動生成せず、手動で実装することに
CoreDataモデルのエディタで
- エンティティ名を変更
- Identityインスペクタで「Module」欄に「『AppName』」を入力
- また「Class」欄に「新エンティティ名」の明確な名前を設定
- コード内のエンティティ名を新エンティティ名に変更
しかし、同じく
'『新エンティティ名』' is ambiguous for type lookup in this context
となる
より根本的な対応
-
モジュール修飾名を使う
各ファイルで新エンティティ名の前にモジュール名を明示的に付ける -
CoreDataモデルの再確認
xcdatamodeldファイルを開き
「Codegen」設定が「Manual/None」になっているか確認
↓
ようやく解決
最後に
CoreData周りはエラーが発生しやすい
エラーが発生したらEntityの設定を見直し
一つづつ解決していく