NSManagedContext多次从上下文中获取问题

时间:2012-12-30 02:12:30

标签: objective-c core-data nsmanagedobjectcontext

我有两个视图控制器。一个searchResults表视图控制器(VC1),其中用户看到与选择标准匹配的行列表和其他ViewDetail(tableview控制器)(VC2),其中用户看到所选VC1行的Detail。通过设置VC2的相关属性,在VC1的prepareforsegue方法中,将获取所选行的详细信息以及managedContext引用所需的信息从VC1传递到VC2。在测试期间,我每次在VC1上选择不同的行以查看不同项目的详细信息时,在(使用导航控制器后退按钮)VC1和VC2之间切换。这通常适用于7-15次切换,但在切换一些尝试后突然崩溃。我尽可能地对此进行了调查,但没有解决方案,因此发布了这个。请帮忙。错误是特定的数组超出索引0的范围。虽然我明白,但我不希望这个由获取请求的结果填充的数组为空。因此我怀疑managedcontext有问题。提供了来自VC2的代码片段

//All this is in  ViewDidLoad of VC2 App crashes at the last line of this snippet. trying to get an object at index 0 which is non existent but should not be ...
NSFetchRequest *request  = [[NSFetchRequest alloc] init];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@" cameraid ==  %@",(NSNumber *)self.selectedCameraid];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Cameras"
                                          inManagedObjectContext:self.managedContext];

//Configure core data request
[request setEntity:entity];
[request setPredicate:predicate];

//Execute request
NSError *error = nil;

NSMutableArray *mutableFetchResults =  [[self.managedContext executeFetchRequest:request error:&error] mutableCopy];

if (mutableFetchResults == nil) {
    // Handle the error.
    NSLog(@"Some error in fetching results");

}
NSLog(@"Mutable fetch results data %@",mutableFetchResults);
self.resultsArray = mutableFetchResults;
Cameras *rowdata = [self.resultsArray objectAtIndex:0]; //Cameras is a managed object

1 个答案:

答案 0 :(得分:0)

经过一番进一步挖掘后,我发现了问题......我在上面的代码中输入一个字符串作为NSNumber(NSNumber *)self.selectedCameraid。显然这就是导致崩溃的原因。我使用NSNumberformatter将NSString对象转换为NSNumber对象,一切似乎都正常。我意识到以这种方式输入强制转换对象是不安全的。