我甚至不确定该怎么称呼这个问题。更不用说如何搜索解决方案。
我正在使用Xcode 4。 我正在使用CoreData。 我有标签栏应用程序。 4个不同的标签。 这是模拟器的一个问题。
两个选项卡的根表视图由一组控制器填充。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSUInteger row = [indexPath row];
SecondViewController *nextController = [self.medControllersArray objectAtIndex:row];
[self.navigationController pushViewController:nextController
animated:YES];
}
当向下钻取到其中一个控制器时,您可以看到另一个表格视图。
当点击下一个控制器的表视图中的Add按钮并添加一个名称或其他任何内容来填充表视图时,如果你转到另一个下一个控制器的表视图,它将填充相同的信息和另一个表视图。
因为我得到了臭名昭着的+entityForName
错误
我在viewDidLoad
中添加它 if (managedObjectContext == nil)
{
managedObjectContext = [(MIT2AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
NSLog(@"After managedObjectContext_: %@", managedObjectContext);
}
在应用的委托方法application:didFinishLaunchingWithOptions
ViewController *viewController = [[ViewController alloc] init];
NSManagedObjectContext *context = [self managedObjectContext];
if (!context) {
NSLog(@"\nCould not create *context for self");
}
viewController.managedObjectContext = context;
我为每个 next 视图控制器和 root 视图执行了此操作,这两个选项卡的根视图未由控制器和控制器数组填充。
当按下下一个视图时,我也会在控制台中收到此警告:
After managedObjectContext_: <NSManagedObjectContext: 0x5934e10>
我希望这一切都有道理。有人可以指出我正确的方向。
提前致谢。
答案 0 :(得分:0)
您是否尝试从模拟器中删除该应用?有时,当您更改核心数据结构上的内容时,应用程序崩溃,无法正确找到数据。删除应用程序将强制它重建数据库。
答案 1 :(得分:0)
感谢上帝!它已经成功了。我在我的数据模型中犯了一个新的Core Data错误(我很确定)。
由于这个错误,我在模拟器(以及手机)中得到了重复:
在数据模型中,我有一个药物实体和所有属性,等等,等等,等等。我创建了一个类,并决定只使用该类来分享3个表视图,当前的meds,过去的meds和过敏。在这样做时,自然没有区别。我回去了,创建了一个新模型,合并了yada,yada,并为当前,过去和过敏添加了3个新实体。然后将父实体设置为主med实体并抽象父实体。当我再次经历并将代码重新编写为新实体时。一切正常!没有更多的重复。嗯,真的,没有更多的三倍。
对于我收到的警告(不是错误,应用程序仍然构建,没有崩溃,你仍然可以通过它)对托管对象上下文做了。为了消除臭名昭着的+ entityForName错误,我尝试了一些我在书中或Apple中看到过的东西。我将AppDelegate导入到每个表中,并在fetchedResultsController中执行了此操作:
- (NSFetchedResultsController *)fetchedResultsController {
MIT2AppDelegate *mit = [[MIT2AppDelegate alloc] init];
if (fetchedResultsController != nil) {
return fetchedResultsController;
}
//if (fetchedResultsController == nil) {
// Create the fetch request for the entity.
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
// the entity name
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Allergies" inManagedObjectContext:mit.managedObjectContext];
[fetchRequest setEntity:entity];
在重新编写代码时,我尝试了tomasBULL推荐的内容: How can I solve NSInternalInconsistencyException', reason: '+entityForName: fail report
这就是错误的来源。所以我回到了之前和现在的状态,没有更多的错误。
我在AppDelegate managedObjectModel中执行此操作
- (NSManagedObjectModel *)managedObjectModel{
if (managedObjectModel != nil){
return managedObjectModel;
}
NSString *path = [[NSBundle mainBundle] pathForResource:@"MIT2ver 3" ofType:@"mom" inDirectory:@"MIT2ver2.momd"];
NSURL *momURL = [NSURL fileURLWithPath:path];
managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL];
return managedObjectModel;
}
因为在我添加模型之前我犯了另一个菜鸟错误之前,我拿出了空间。感谢udibr回答:Implementation of “Automatic Lightweight Migration” for Core Data (iPhone)
感谢所有回答的人。上帝解决了这个问题!