iPhone UITableView 怪异

Posted

技术标签:

【中文标题】iPhone UITableView 怪异【英文标题】:iPhone UITableView Weirdness 【发布时间】:2011-06-11 02:35:27 【问题描述】:

我什至不知道该怎么称呼这个问题。更不用说如何寻找解决方案了。

我正在使用 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];

当向下钻取到其中一个控制器时,您可以看到另一个表表视图。

在下一个控制器的表格视图中点击“添加”按钮并添加名称或其他内容以填充表格视图时,如果您转到另一个下一个控制器的表格视图,它会填充相同的信息和另一个表格视图。

因为我遇到了臭名昭著的+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 视图和控制器数组执行此操作。 p>

当推送下一个视图时,我也会在控制台中收到此警告:

After managedObjectContext_: <NSManagedObjectContext: 0x5934e10>

我希望这一切都有意义。并且有人可以为我指明正确的方向。

提前致谢。

【问题讨论】:

【参考方案1】:

您是否尝试从模拟器中删除该应用程序?有时,当您更改核心数据结构上的某些内容时,应用程序崩溃时无法正确找到数据。删除应用程序将强制它重建数据库。

【讨论】:

不是有时,当您使用核心数据模型并对其进行更改时,除非您采取适当的步骤来迁移核心数据模型,否则应用程序会崩溃......当您删除应用程序之前的核心数据模型时与所有数据一起丢失,因此如果它实际上是应用程序的第二个版本,则应迁移核心数据模型......【参考方案2】:

感谢上帝!!!它已经解决了。我在我的数据模型中犯了(我敢肯定)一个菜鸟 Core Data 错误。

由于这个错误,我在模拟器(以及手机)中得到了重复:

在数据模型中,我有一个药物实体和所有属性,等等等等。我创建了一个类,并决定仅使用该类在 3 个表格视图、当前药物、过去药物和过敏症之间共享。这样做自然没有区别。我回去,创建一个新模型,合并 yada、yada,并为当前、过去和过敏添加了 3 个新实体。然后将父实体设置为主医疗实体并抽象父实体。当我再次检查并将代码重新编写为新实体时。一切正常!没有更多的重复。好吧,真的,不要再重复了。

对于我收到的警告(不是错误,应用程序仍在构建,没有崩溃并且您仍然可以通过它)是对托管对象上下文执行的。为了消除臭名昭著的 +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)

感谢所有回答的人。上帝解决了!

【讨论】:

以上是关于iPhone UITableView 怪异的主要内容,如果未能解决你的问题,请参考以下文章

FMDB 和 UITableView

UITableView 怪异!有图片

自动布局弄乱了我的动画

滚动/调整 UITableView

UITableView 拉伸问题

ALAsset 指针在访问时抛出 EXC_BAD_ACCESS