在我目前的項目中,我得到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
嗨,你可以附加堆棧跟蹤? –