在我目前的项目中,我得到exc_bad_access随机,但总是在同一行代码(从方法返回一个NSNumber对象时)。iOS - EXC_BAD_ACCESS - 在ARC下如何发生?
问题是,exc_bad_access怎么可能在ARC下发生?
我没有使用任何unsafe_unretained指针或类似的东西。
在此线程第一个答案似乎可以解释这些错误的一个可能的原因,但不幸的是,我不太明白的设置:
EXC_BAD_ACCESS using ARC and can't track on simulator
有getImageVersion在类的接口它:
@interface PhotoFetcher : NSObject {
NSMutableData *photoData;
NSString *photoNick;
NSNumber *imageVersion; // <---- Strong ivar
PhotoSize photoSize;
}
这里的崩溃方法:
- (int)getImageVersion:(NSString *)nick
{
if (nick && !imageVersion)
{
imageVersion = [[RuntimeData sharedData].nickImageVersionCache imageVersionForNick:nick];
if (!imageVersion)
{
NSManagedObjectContext *context = [[RuntimeData sharedData].knuddelsDataStore managedObjectContext];
[context performBlockAndWait:^{
NSFetchRequest *userRequest = [NSFetchRequest fetchRequestWithEntityName:@"ConversationUser"];
userRequest.predicate = [NSPredicate predicateWithFormat:@"nickname = [c] %@", nick];
userRequest.propertiesToFetch = @[@"imageVersion"];
userRequest.resultType = NSDictionaryResultType;
userRequest.fetchLimit = 1;
NSArray *objects = [context executeFetchRequest:userRequest error:nil];
if (objects.count > 0)
{
NSDictionary *dict = objects[0];
imageVersion = dict[@"imageVersion"];
[[RuntimeData sharedData].nickImageVersionCache setImageVersion:imageVersion forNick:nick];
}
}];
}
}
return imageVersion.intValue; // <<<<----- Line of Crash, exc_bad_access
}
这就是堆栈跟踪:
这是Swift还是ObjC?你在使用核心数据吗? – Sajjon
ObjC和CoreData – Max
嗨,你可以附加堆栈跟踪? –