也许我不打算使用CoreData显示选定行的详细信息,但我无法弄清楚为什么会出现“BAD_ACCESS”错误。我搜索了一下,找不到我在找什么。核心数据DetailTableView BAD_ACCESS错误
基本上我使用CoreData来填充表视图的数据。它检索所有实体的所有标题属性。当用户点击一行时,我有一个详细视图,需要显示该实体的描述。我想我需要在我的DetailViewController中为新的NSFetchRequest创建一个新的NSManagedObjectContext和一个新的NSEntityDescription,然后使用NSPredicate来说“where title = [user selected title]”。我选择一行时出现错误。见代码:
- (void)viewDidLoad
{
// Do any additional setup after loading the view from its nib.
// Get the objects from Core Data database
Caregiver_Activity_GuideAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [appDelegate managedObjectContext];
NSEntityDescription *entityDescription = [NSEntityDescription
entityForName:@"Definition"
inManagedObjectContext:context];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDescription];
NSPredicate *pred = [NSPredicate predicateWithFormat:@"(title = %@)", self.title];
[request setPredicate:pred];
NSError *error;
NSArray *objects = [context executeFetchRequest:request error:&error];
if (objects == nil) {
NSLog(@"There was an error!");
// Do whatever error handling is appropriate
}
for (NSManagedObject *oneObject in objects) {
[definitionDescriptionTextView setText:[oneObject valueForKey:@"desc"]];
}
[objects release];
[request release];
[super viewDidLoad];
}
我注释掉了代码,一切正常。但是,当我尝试使用断点进行调试时,没有任何问题。所以我更困惑。
我知道CoreData对于我所做的事可能是过量的,但这对我来说是一个学习应用程序。
编辑:我没有包括我正在使用预填充实体的sqlite数据库。
您还可以在my github page上下载我的项目。
我发现了这个问题。当我不应该去的时候,我正在释放物体。 A非常好 苹果开发者论坛上的苹果员工告诉我,我不知道什么是内存管理,并给了我一个链接到标准800页Apple Dev内存管理文档的链接。 –
Miles
我在苹果开发者论坛上从不同的用户那里得到了更好的回应:“在这种情况下,违规是你打电话 - 在你不应该的情况下发布 - 如果你想让Xcode告诉你你做了一个干净的项目构建,然后使用“构建和分析”选项,如果一切正常,至少会有一个关于您在原始消息中发布的方法的蓝色图标消息。 我给了他点答案,并感谢他。 – Miles