iOS CGRECTOFFSETとコアデータの問題
-
27-10-2019 - |
質問
私はこれが意味をなさないことを知っていますが、コアデータを使用してCGRECTOFFSETを呼び出すiPhoneアプリで本当に奇妙なエラーを取得しています。私のアプリDelegateのDidfinishlaunchingWithoptionsメソッドは次のようになります。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Setup the Managed Object Context
NSManagedObjectContext *context = [self managedObjectContext];
if (!context) {
// Do something - Like exit
}
//Load up the database form a pList
NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"tJournals" ofType:@"plist"];
NSMutableArray *plistJournals = [NSMutableArray arrayWithContentsOfFile:plistPath];
//Create a bunch of journals
for (NSDictionary *journal in plistJournals) {
[TJournal journalWithDictionary:journal inManagedObjectContext:context];
}
NSError *error = nil;
[context save:&error];
// ------ Create the View Controller ------
// The Scrolling List
JournalListVC *jvc = [[JournalListVC alloc] init];
// Adjust for the Status Bar's height
CGRect viewFrame = CGRectOffset(jvc.view.frame, 0.0, 20.0);
jvc.view.frame = viewFrame;
jvc.managedObjectContext = context;
// Add the View Controller to the screen
[self.window addSubview:jvc.view];
[self.window makeKeyAndVisible];
return YES;
}
現在、アプリは次のエラーでクラッシュします。 CGRECTビューフレーム ライン:
「著しい例外によるアプリの終了「nsinternalinconsistencyException」、理由: '+entityForname:エンティティ名' tjournal ''のnsmanagedObjectModelを見つけることができませんでした "
CGRECTラインにコメントすると、正常に実行されます。 forループ内のコールは正常に実行されます(コアデータDBエンティティ名TJournalにデータを書き込み、それが想定されていることを正確に実行します)。偽り。しかし、私の人生のために、私はそれを理解することはできません。
すべてのターゲットをクリーニングして、シミュレータのデータベースを一掃するなどを試みましたが、何も機能しないようです。
何か案は?ありがとう!
解決
参照するときに注意してください jvc.view.frame
, 、JVCの見解を動的にロードしています。ビュー(またはXIB!)の内容が、ロードされたときに管理されたオブジェクトコンテキストに依存している場合、エラーが生成される可能性があります。
動いてみてください jvc.managedObjectContext = context;
直後に行 JournalListVC *jvc = [[JournalListVC alloc] init];
.
(PS:あなたのビューはステータスバーを考慮する必要はありません。代わりに、UiWindowはそれを行う必要があります。そして、ビューコントローラーのビューのフレームはウィンドウの境界にすぎません。)