2

参照用に私のソースをダウンロードしてください!

私は iOS 開発に不慣れで、独学で学ぼうとしています...助けが必要です

まず、「安全文化マスター ビュー」に切り替えるとエラーが発生します... 絵コンテ

2012-06-07 11:50:54.720 SafetyCulture[1777:fb03] *** キャッチされない例外 'NSInternalInconsistencyException' によるアプリの終了、理由: '+entityForName: エンティティ名 'Event'' の NSManagedObjectModel が見つかりませんでした

これを解決する方法がわかりません...

次に、2 段階のプロセスでレコードを作成したいと考えています...そして「質問...」VC で、ユーザーに約 20 の質問に答えてもらいたいのですが、それらはすべて同じようにフォーマットされます。追加のxibは必要ありませんよね?最後の質問に到達したら、「次へ」ボタンに「終了」または「保存」と表示させたいのですが...シンプルにする必要がありますか?

Xcode を使い始めたいと思っています...追加情報が必要な場合はお知らせください。最善を尽くします。

4

3 に答える 3

1

既存のプロジェクトでコアデータを追加する場合は、このリンクの手順に従ってください。コアデータの追加既存のiPhoneプロジェクト

2番目の質問:ビューを追加する必要はありません。UIScrollViewを使用して、必要なだけ展開してください。

于 2012-06-07T16:23:50.677 に答える
1

例外をスローしていたコードを追跡しました。

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Event" inManagedObjectContext:self.managedObjectContext];

method- (NSFetchedResultsController *)fetchedResultsControllerで、同じ名前のプロパティのカスタム セッター。存在しない場合は初期化します。本当の問題は、それself.managedObjectContextが現在ゼロであることです。コード内のどこにも、managedObjectContext が割り当てられたマスター ビュー コントローラーはありません。

これを行う最も簡単な方法は、この方法で AppDelegate から取得することです。

#import "safetyCultureAppDelegate.h" //this needs to be at the top to make sure the compiler knows what you’re on about.
...
self.managedObjectContext = [(safetyCultureAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; //put this in the viewDidLoad, or wherever you can set it when the Master VC is created.

これは、ブレークポイントを使用して解決するのは非常に簡単でした。ブレークポイントは、このような再現可能なバグで非常に役立つため、使用方法を学ぶことを強くお勧めします。

2 番目の質問ですが、この猫の皮を剥ぐ方法は無数にあります。たくさんのシーンを作成し、それらの間でセグエをプッシュし、それらに共有の「質問クラス」を与えることに何の問題もありません。かなり見栄えがよく、コードはあまり必要ありません。パフォーマンスは問題になりません。

つまり、プログラムで実行したい場合は、NSDictionaries の NSArray を使用し、各 dict に質問と可能な回答を保持し、前後にヒットするときに配列からそれらをロードするようにコントローラーをプログラムし、保存することを忘れないでください。ただし、質問が静的な場合は、ストーリーボード アプローチを使用することを強くお勧めします。はるかに手間がかかりません。

ブレークポイントとセグエはすべて問題ありませんが、今はコーヒーを淹れてビスケットを買って、コア データ プログラミング ガイドを最初から最後まで読むことをお勧めします。Apple のドキュメントは非常にアクセスしやすいことがわかります。

これに本当に慣れていない場合は、このアドバイスに従ってください。それは私のために働いた。

于 2012-06-08T20:08:22.483 に答える
0

これはストーリーボードの問題ではないと思います。View Controller には Core Data スタックが設定されている必要があります。呼び出すコードの設定entityForName:が有効であることを確認してください。NSManagedObjectContext

Core Data スタックは、Core Data が実行する必要があるいくつかのオブジェクトです。Core Data で作成された標準の Xcode テンプレートでは、これらのオブジェクトは Application Delegate で設定されます。

Core Data の「基本単位」は、NSManagedObject です。モデリング ツールでエンティティをモデル化し、Xcode を使用してモデルからクラスを生成します。これらの生成されたクラスは、NSManagedObjectObject のサブクラスです。

通常、NSManagedObjectContext と対話します。NSManagedObjectContext は、NSManagedObjects に変更を加える「スクラッチパッド」のようなものです。コンテキストは、アプリ デリゲートが設定する Core Data スタックの最上位です。

Xcode で新しいプロジェクトを作成すると、Core Data を使用するかどうかなど、いくつかの情報を入力するよう求められます。このボックスをチェックすると、Xcode は永続ストア コーディネーター管理対象オブジェクト コンテキストを設定します。これが Core Data スタックの基本です。

通常、アプリ デリゲートのマネージド オブジェクト コンテキストへの参照を渡すことがあります。(複数のスレッドから同じコンテキストにアクセスすることはできません。コア データとマルチスレッドは別の章です。)次に、新しいオブジェクトをインスタンス化するたびに、それを管理対象オブジェクト コンテキストに直接挿入します。

保存するには、コンテキストで save を呼び出します。

于 2012-06-08T14:44:23.320 に答える