2011-08-03 55 views
0

我正在进行异步请求,但是当我尝试使用此代码解析它时使用异步请求时的exc_bad_access

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {  
[connection release]; 

NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 
[responseData release]; 

NSDictionary *missionsDict = [responseString JSONValue]; 

/*NSArray *luckyNumbers = [json objectWithString:responseString error:&error];*/ 
NSLog(@"user Info array is: %@", missionsDict); 
// NSDictionary *array = [luckyNumbers1 objectForKey:@"data"]; 
NSDictionary *missionsData; 
missionsData = [missionsDict objectForKey:@"data"]; 
NSLog(@"missionsData is: %@", missionsData); 
NSEnumerator *inner = [missionsData objectEnumerator]; 
UIScrollView *missionsScroll; 
missionsScroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)]; 
missionsScroll.contentSize = CGSizeMake(320, 1005); 
[self.view addSubview:missionsScroll]; 
id value; 
int badgeY1; 
int badgeY2; 
int badgeY3; 
badgeY1 = 121; 
badgeY2 = 161; 
badgeY3 = 150; 
while((value = [inner nextObject])) { 
    NSLog(@"progress is: %@", [value objectForKey:@"progress"]); 
    NSLog(@"user Info array is: %@", missionsDict); 
    NSLog(@"name is: %@",[value objectForKey:@"reward_definitions"]); 
    NSLog(@"missionsData is: %@", missionsData); 
    NSDictionary *moreData; 
    moreData = [value objectForKey:@"reward_definitions"]; 
    NSEnumerator *inner = [moreData objectEnumerator]; 
    id value2; 
    int badgeX; 
    badgeX = 10; 
    while((value2 = [inner nextObject])) { 
     UIProgressView *progressView; 
     progressView = [[UIProgressView alloc] initWithFrame:CGRectMake(0, badgeY3, 372, 9)]; 
     float progressValue; 
     progressValue = ([[[value objectForKey:@"progress"] objectForKey:@"earned"] floatValue]/[[[value objectForKey:@"progress"] objectForKey:@"possible"] floatValue]); 
     NSLog(@"progressValue is: %f", progressValue); 
     [progressView setProgress:progressValue]; 
     [missionsScroll addSubview:progressView]; 
     UILabel *missionName; 
     missionName = [[UILabel alloc] initWithFrame:CGRectMake(20, badgeY1, 280, 25)]; 
     missionName.backgroundColor = [UIColor clearColor]; 
     missionName.textColor = [UIColor whiteColor]; 
     missionName.font = [UIFont fontWithName:@"Heiti TC" size:23.0]; 
     missionName.text = [value objectForKey:@"name"]; 
     [missionsScroll addSubview:missionName]; 
     NSLog(@"badgeY2 is: %@", badgeY2); 
     badgesScroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0, badgeY2, 318, 70)]; 
     badgesScroll.contentSize = CGSizeMake(320, 70); 
     [missionsScroll addSubview:badgesScroll]; 

     NSLog(@"Image URL is: %@", [value2 objectForKey:@"image_url"]); 
     NSURL *url1 = [NSURL URLWithString: [NSString stringWithFormat:@"%@", [value2 objectForKey:@"image_url"]]];    
     NSData *urlData1 = [NSData dataWithContentsOfURL:url1]; 
     UIImage *image1 = [UIImage imageWithData:urlData1]; 
     UIImageView *badge = [[UIImageView alloc] initWithImage:image1]; 
     [badge setFrame:CGRectMake(badgeX, -10, 70, 70)];    
     [badgesScroll addSubview:badge]; 
     [badge release]; 
     badgeCount = badgeCount+1; 
     badgeX = badgeX +80; 
    } 
    // NSLog(@"reward_definitions is: %@", [missionsData objectForKey:@"id"]); 
    //  NSLog(@"Image URL is: %@", [[value objectForKey:@"reward_definitions"] objectForKey:@"image_url"]); 
    //if ([array isKindOfClass:[NSDictionary class]]) { 
    badgeY1 = badgeY1 +100; 
    badgeY2 = badgeY2 +100; 
    badgeY3 = badgeY3 +100; 
    missionCount = missionCount+1; 
} 
for (int b; badgeCount > 4; b = b+1) { 
    [badgesScroll setContentSize:CGSizeMake(badgesScroll.contentSize.width+80, badgesScroll.contentSize.height)]; 
} 
for (int a; missionCount > 4; a = a+1) { 
    missionsScroll.contentSize = CGSizeMake(776, missionsScroll.contentSize.height+200); 
} 

}

因为NSLog(@"badgeY2 is: %@", badgeY2);上的EXC_BAD_ACCESS而崩溃

回答

2

your badgeY2包含一个整数值。要使用NSLog打印整数值,您必须使用%d 使用NSLog时应始终记住它,它返回的是什么样的值!

NSLog(@"badgeY2 is: %d", badgeY2); 

还有另一种挫折感解决方案,只是让你知道

NSLog(@"%@", [NSNumber numberWithInt:badgeY2]); 

这些都是NSLog的格式说明:

%@  Object  
%d, %i signed int 
%u  unsigned int 
%f  float/double 

%x, %X hexadecimal int 
%o  octal int 
%zu size_t 
%p  pointer 
+0

真棒答案。感谢您使用不同的格式说明符 –

1

的应该是