iOS CGRectOffset и основные проблемы с данными - PullRequest
1 голос
/ 29 апреля 2011

Я знаю, что это не имеет никакого смысла, но я получаю действительно странную ошибку в приложении для iPhone, которое я создаю с использованием Core Data и вызываю CGRectOffset.Метод 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 viewframe в:

"Завершение приложения из-за необработанного исключения" NSInternalInconsistencyException ", причина: '+ entityForName: не удалось найти NSManagedObjectModel для имени объекта' TJournal ''"

Если я закомментирую строку CGRect, он будет запущенхорошо.Вызов внутри цикла for выполняется очень хорошо (он записывает данные в сущность БД Core Data с именами TJournal и делает именно то, что должен.) Очевидно, что нет никакой зависимости от Core Data для CGRectOffset, поэтому я предполагаю, что эта ошибкаподдельный.Но я не могу, на всю жизнь, понять это.

Я пытался очистить все цели, стереть базу данных в симуляторе и т. Д. Но, похоже, ничего не работает.

Есть идеи?Спасибо!

1 Ответ

0 голосов
/ 04 мая 2011

Обратите внимание, что когда вы ссылаетесь на jvc.view.frame, он динамически загружает представление jvc.Если содержимое представления (или xib!) Зависит от контекста управляемого объекта при загрузке, это может привести к ошибке.

Попробуйте переместить строку jvc.managedObjectContext = context; вправо после JournalListVC *jvc = [[JournalListVC alloc] init];.

(PS: ваше представление не должно учитывать строку состояния; вместо этого ваше UIWindow должно это делать, а затем рамка представления вашего контроллера представления должна быть просто границами окна.)

...