그래서 내 앱을 "스킨"하는 URL을 다운로드하는 방법이 있습니다. 몇 달 동안 iOS 5에서 일해 왔고, xcdatamodel의 엔티티에 string 유형의 새로운 속성을 추가하여 작동을 멈췄습니다. 속성을 삭제하더라도 여전히 작동하지 않습니다.NOSntity의 설정 값은 iOS 5에서는 폭발하지만 iOS 6에서는 불어납니다.
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 개체에 추가됩니다.
+ (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;
}
'스킨'클래스의 코드가 필요합니다. 특히, + findFirstObjectByAttribute : withValue : inContext :'do? –
업데이트 됨, 도움이 되십시오. – mwoods79
핵심 데이터 스택 설정은 어떻게됩니까? 당신은 하나의 맥락 만 가지고 있습니까? – hatunike