我有两个视图控制器。一个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
答案 0 :(得分:0)
经过一番进一步挖掘后,我发现了问题......我在上面的代码中输入一个字符串作为NSNumber(NSNumber *)self.selectedCameraid。显然这就是导致崩溃的原因。我使用NSNumberformatter将NSString对象转换为NSNumber对象,一切似乎都正常。我意识到以这种方式输入强制转换对象是不安全的。