2012-08-26 2 views
0

글쎄 json의 데이터를 파싱 중이므로 배열에 동적으로 추가합니다. 만약 내가 그들 중 12 데이터를 추가, 그 확인. 나는이 오류를 내려면 13를 추가하기 위하여려고하고있다 그러나 (상관없이 13 무엇 없음) :NSMutable 배열에 데이터를 추가 할 때 EXC_BAD_ACCESS가됩니다.

HomeView.h 

#import <UIKit/UIKit.h> 

@interface HomeView : UIViewController{ 
    NSMutableData *responseData; 
} 

@property (nonatomic, strong) NSMutableData *responseData; 

@end 

내 구현 파일 :

@implementation HomeView 
@synthesize responseData; 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
NSLog(@"connectionDidFinishLoading"); 
NSLog(@"Succeeded! Received %d bytes of data",[self.responseData length]); 

// convert to JSON 
NSError *myError = nil; 
NSDictionary *res = [NSJSONSerialization JSONObjectWithData:self.responseData options:NSJSONReadingMutableLeaves error:&myError]; 
    NSString *parsed_track=[res objectForKey:@"data1"]; 
    [tracks_condition addObject:parsed_track]; 
    parsed_track=[res objectForKey:@"data2"]; 
    [tracks_condition addObject:parsed_track]; 
    parsed_track=[res objectForKey:@"data3"]; 
    [tracks_condition addObject:parsed_track]; 
    parsed_track=[res objectForKey:@"data4"]; 
    [tracks_condition addObject:parsed_track]; 
    parsed_track=[res objectForKey:@"data5"]; 
    [tracks_condition addObject:parsed_track]; 
    parsed_track=[res objectForKey:@"data6"]; 
    [tracks_condition addObject:parsed_track]; 

    parsed_track=[res objectForKey:@"data7"]; 
    [tracks_condition addObject:parsed_track]; 
    parsed_track=[res objectForKey:@"data8"]; 
    [tracks_condition addObject:parsed_track]; 
    parsed_track=[res objectForKey:@"data9"]; 
    [tracks_condition addObject:parsed_track]; 
    parsed_track=[res objectForKey:@"data10"]; 
    [tracks_condition addObject:parsed_track]; 
    parsed_track=[res objectForKey:@"data11"]; 
    [tracks_condition addObject:parsed_track]; 
    parsed_track=[res objectForKey:@"data12"]; 
    [tracks_condition addObject:parsed_track]; 

    // parsed_track=[res objectForKey:@"data13"]; //HERE COMES THE ERROR 
    // [tracks_condition addObject:parsed_track]; 

다음
EXC_BAD_ACCESS 

내 코드입니다

메모리 관리가 맞지만 뭔가를 찾을 수 없습니다.

+0

당신의 코드. responseData 속성을 표시하지만 사용하지는 말고 나머지는 컨텍스트없이 throw 된 코드 덩어리처럼 보입니다. – Abizern

+0

Ok는 편집 – ghostrider

답변

2

@"data13" 키의 개체가 있는지,이 키가 존재하지 않고 nil을 반환했는지 확인하십시오. 이 경우 nil을 확인하고 추가할지 여부를 결정해야합니다. 추가하려는 경우 을 대신 추가하십시오. NSObject을 상속받은 객체를 사용해야합니다.

편집 : 너무 for 루프에서 그것을 확인하고 [NSString stringWithFormat.....]

+0

을 참조하십시오. 존재하지 않습니다. 나는 데이터 18까지 키를 가지고 있고 12 이상을 더하는 모든 것은 나에게 오류를 가져온다. – ghostrider

1

EXC_BAD_ACCESS와 문자열을 구성 해보세요 당신이 배열에 nil 객체를 추가되기 때문에, 또는 개체가 이미 시간으로 출시되었습니다 당신 그것을 배열에 추가하십시오.

for (NSUInteger idx = 1; idx <= [[res allKeys] count]; idx++) { 

    if ([[[res allKeys] objectAtIndex:idx] rangeOfString:@"data"].location != NSNotFound) 
     [tracks_condition addObject:[res objectForKey:[NSString stringWithFormat:@"data%d", idx]]]; 

} 

또는 더 나은 :

다른 주에

, 당신은 오히려 많은 코드보다, 배열에 객체를 추가하는 루프를 사용할 수의 모두가 아니다

[self.questionInfo enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { 

     if ([key rangeOfString:@"data"].location != NSNotFound && obj != nil) { 

      [tracks_condition addObject:obj]; 

     } 

     else { 

      if ([tracks_condition count] >= 18) { 
       *stop = YES; 

      }     
     } 

}]; 
+0

코드를 보내 주셔서 고맙습니다.하지만 그런 식으로 추가하는 것은 불가능합니다. 30 개 중에서 18 개 밖에 가져 오지 않고 데이터를 내 스크립트가 출력하는 것과 같은 방식으로 저장하지 않기를 바랍니다. – ghostrider

관련 문제