节目接收信号:EXC_BAD_ACCESS
Posted
技术标签:
【中文标题】节目接收信号:EXC_BAD_ACCESS【英文标题】:Program received signal: EXC_BAD_ACCESS 【发布时间】:2011-07-07 19:51:24 【问题描述】:我的 UITableViewController 子类中有以下方法:
-(void)populateDataStorage
NSString *path = [[NSBundle mainBundle] pathForResource:@"FakeData" ofType:@"plist"];
if(path)
NSArray *plistData = [[NSArray alloc] initWithContentsOfFile:path];
NSEnumerator *enumerator = [plistData objectEnumerator];
NSArray *personResults;
Photo *photo;
Person *person;
id currItem = [enumerator nextObject];
while (currItem != nil)
photo = (Photo *)[NSEntityDescription insertNewObjectForEntityForName:@"Photo" inManagedObjectContext: [[FlickrFetcher sharedInstance] managedObjectContext]];
photo.name = [currItem objectForKey:@"name"];
photo.path = [currItem objectForKey:@"path"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@", [currItem objectForKey:@"user"]];
personResults = [[FlickrFetcher sharedInstance] fetchManagedObjectsForEntity:@"Person" withPredicate:predicate];
if ([personResults count] > 0)
person = [personResults objectAtIndex:0];
else
person = (Person *)[NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:[[FlickrFetcher sharedInstance] managedObjectContext]];
person.name = [currItem objectForKey:@"user"];
photo.person = person;
[person addPhotosObject:photo];
NSLog(@"Photo %@ added for user %@", photo.name, person.name);
currItem = [enumerator nextObject];
[plistData release];
我在我的 AppDelegate 中的应用程序中调用它 didFinishLaunchingWithOptions 方法,该方法也在同一个 AppDelegate 中,当它被调用时,我得到它在调试时说的错误,如果我不调试它会运行的行方法和加载没有问题。如果我根本不调试,它将不会调用该方法。
编辑:根据答案更改代码问题仍然存在,如果我只是运行没有任何反应,但在调试时出现错误。当我调试整个方法时,没有显示错误。
【问题讨论】:
【参考方案1】:您对NSLog
的调用试图访问您的person
变量的name
属性。但是,当您声明 person
变量时,您没有初始化它,因此它指向垃圾。你只在你的else
子句中给它一个有效的值,所以有时你的 NSLog 正在访问一个未初始化的对象。
【讨论】:
我修改了代码并更新了帖子,问题依旧 你是怎么修改代码的?您可以将更新后的代码添加到您的帖子中吗? 我所做的是在 if 语句的两种情况下都设置了 person 对象,以纠正你所说的,这样当我访问它的 name 属性时,它总是被设置为某个东西以上是关于节目接收信号:EXC_BAD_ACCESS的主要内容,如果未能解决你的问题,请参考以下文章