【问题标题】:Memory leak when retrieving data from database从数据库中检索数据时发生内存泄漏
【发布时间】:2011-03-21 13:25:04
【问题描述】:

嘿,我已经为数据库访问创建了一个自定义检索方法:

+(NSArray*) recordsForTable:(NSString *)table predicate:(NSPredicate *)prd{
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

    NSEntityDescription *entity = [NSEntityDescription entityForName:table inManagedObjectContext:managedObjectContext];

    [fetchRequest setEntity:entity];

    [fetchRequest setPredicate:prd];

    NSArray *records = [managedObjectContext executeFetchRequest:fetchRequest error:nil];

    [fetchRequest release];

    return records;
}

然后我在这个方法中使用上面的方法:

-(NSArray *)tableViewControllerData{

    NSNumber *savedBool = [[NSNumber alloc] initWithBool:YES];

    NSString *onlyGetSavedVisitObjects = [NSString stringWithFormat:@"bolSaved=%@", savedBool];
    [savedBool release];
    NSMutableArray *data = [[[CoreDataAccess recordsForTable:@"LPVisit" stringPredicate:onlyGetSavedVisitObjects] mutableCopy] autorelease];
    NSSortDescriptor *dateDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"dteVisitDate" ascending:NO];
    NSArray *descriptors = [NSArray arrayWithObjects:dateDescriptor, nil];
    [data sortedArrayUsingDescriptors:descriptors];

    return data;    
}

我遇到的问题是,当用户对 LPVisit 表进行更改并调用此方法以显示这些更改时,它会使应用程序崩溃。

[编辑]

它产生的异常是:

 -[__NSArrayM objectID]: unrecognized selector sent to instance 0x4dac1f0

我相信错误出现在以下行:

NSMutableArray *data = [[[CoreDataAccess recordsForTable:@"LPVisit" stringPredicate:onlyGetSavedVisitObjects] mutableCopy] autorelease];

如果我删除自动释放,我会遇到内存泄漏,但应用程序不会崩溃。

有人有什么见解吗,先谢谢了

【问题讨论】:

  • 不使用 NSFetchedResultsController 的任何原因。您可以直接从 NSFetchedResultsControllerDelegate 处理任何更新/删除/插入表。
  • @rckoenes 它是一个现有的应用程序(我没有创建),我希望只是滴入代码并添加上述方法有助于的编辑功能
  • 您有任何崩溃消息给我们,这将使我们有更多的工作要做。
  • @rckoenes 抱歉。我已经更新了原始帖子以包含错误消息和我认为它发生的行

标签: iphone objective-c memory-leaks nsfetchrequest


【解决方案1】:

可变复制是否有可能因为*recordsnil 而引发异常?如果@"bolSaved=%@" 是拼写错误并且应该是@"boolSaved=%@",则可能会发生这种情况。

【讨论】:

  • 感谢您的回复。可悲的是不是错字,只是检查记录是否为零,但不是
  • 哦,好吧 :) 如果您使用调试器单步执行该代码,那么所有内容都是您期望的类型吗?没有意外的零点?它在哪一行抛出异常?
  • 当我单步执行代码时,它会在我无法理解的地方发生故障,并在那里崩溃。认为我将不得不将它重新实现为 fetchrequestcontroller,但仍然很想现在是什么导致它在未来
  • 您自己的代码的最后一行是什么,在您无法再遵循它并崩溃之前它命中?
  • 它完成了所有表格单元格的创建
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-31
  • 2011-09-27
  • 1970-01-01
  • 2015-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多