所以我有一个方法可以下载图片的网址,这些图片可以“贴上”我的应用。它已经在iOS 5中工作了几个月,我在我的xcdatamodel中为实体添加了一个string类型的新属性,它停止了工作。即使我删除了该属性,它仍然无效。
当我清理xcode并从iPad删除应用程序然后启动应用程序。
在iOS 5中,我收到此错误:“线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x1)”如果我跟踪堆栈跟踪,则会在我调用setValue:forKey:
时发生。
但是,如果我在iOS 6中清理并运行,则可以正常工作。
- (void)fetchSkinWithCompletion:(void (^)(void))completionBlock failure:(void (^)(void))failureBlock {
NSString *skin = [self skinName];
if (skin) {
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@/skin/%@", BASE_URL, skin]];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSURLResponse *response = nil;
NSError *error = nil;
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
if (!error) {
NSError *jsonError = nil;
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableLeaves error:&jsonError];
if (!jsonError) {
Skin *s = (Skin *)[Skin findFirstObjectByAttribute:@"name" withValue:skin inContext:[AppDelegate moc]];
if (s == nil) {
s = [NSEntityDescription insertNewObjectForEntityForName:@"Skin" inManagedObjectContext:[AppDelegate moc]];
}
for (NSString * key in json) {
/******** THIS IS WHATS BLOWING UP IN iOS 5 *************/
[s setValue:[json objectForKey:key] forKey:key];
}
[[AppDelegate moc] save:nil];
self.selectedSkin = s;
[self downloadImageAssetsForSkin:self.selectedSkin completionBlock:completionBlock];
return;
} else {
DLog(@"Error parsing JSON:%@", jsonError);
}
} else {
DLog(@"User with Device ID:%@ failed fetch skin with error:%@.", [AppDelegate uniqueID], error);
}
}
failureBlock();
return;
}
findFirstObjectByAttribute:withValue:inContext
是NSManaged Object的补充。
+ (NSManagedObject *)findFirstObjectByAttribute:(NSString *)attr_name withValue:(id)value inContext:(NSManagedObjectContext *)context {
NSFetchRequest *fetch = [[NSFetchRequest alloc] initWithEntityName:NSStringFromClass([self class])];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K == %@", attr_name, value];
fetch.predicate = predicate;
fetch.fetchLimit = 1;
NSError *error = nil;
NSArray *results = [context executeFetchRequest:fetch error:&error];
if (results.count > 0) {
return [results objectAtIndex:0];
}
return nil;
}
答案 0 :(得分:0)
这最终成了核心数据的错误。
如果其他人遇到这个问题,这是我非常“脆弱”的解决方案。
删除和添加实体没有做任何事情(没有解决它)。然而,我的一个同事在xcdatamodel“foobar”上添加了另一个属性,没有动态或数据模型上的任何东西,它似乎运行正常。但是,如果我删除“foobar”,xcdatamodel将不再起作用(仅适用于ios5)。
希望能帮助遇到此问题的任何人。
此外,如果您有关于此错误的信息或更好的解决方案,请发布它。我真的非常喜欢对这个错误的理解,以及一个“真正的”修复。