2012-08-07 3 views
0

저는 그림이 게시물에 첨부되어 있는지를 결정하고 배열로 저장하는 iPhone 용 Facebook Feed App에서 작업하고 있습니다. 코드를 실행할 때, NSLog는 objectAtKey가 있는지 여부를 읽는 중이지만 배열에 입력되는 것이 아무것도 없다고 알려줍니다. @ "picture". 다음은 제 코드 중 일부입니다. MasterView.m에서iOS : 배열에 문자열을 저장할 수 없습니다.

:

//create array containing individual "datas" 
NSArray *items = [json objectForKey:@"data"]; 

for(NSDictionary *item in items) 
{ 
    // store message in ItemStore sharedStore 
    if([item objectForKey:@"message"] || [item objectForKey:@"message"] != nil || 
     [[item objectForKey:@"message"] length] > 0){ 
     [[JSONFeedItemStore sharedStore] createItem:[item objectForKey:@"message"]]; 
    } 

    // 
    if([item objectForKey:@"picture"]){ 
     [[JSONFeedItemStore sharedStore] createPicture:[[item objectForKey:@"picture"] description]]; 
     NSLog(@"url: %@", [item objectForKey:@"picture"]); 
    } else { 
     [[JSONFeedItemStore sharedStore] createPicture:@"http://i.imgur.com/TpIK5.png"]; // blank 
     NSLog(@"creating blank picture"); 
    } 
} 

ItemStore.m

- (void)createPicture:(NSString *)pictureUrl 
{ 
    [pictures addObject:pictureUrl]; 
    NSLog(@"Number: %d, URL: %@", [pictures count], [pictures objectAtIndex:[pictures count]]); 
} 

내 콘솔에서이

2012-08-07 08:21:54.153 JSONFeed[2502:f803] Number: 0, URL: (null) 
2012-08-07 08:21:54.154 JSONFeed[2502:f803] creating blank picture 
2012-08-07 08:21:54.155 JSONFeed[2502:f803] Number: 0, URL: (null) 
2012-08-07 08:21:54.156 JSONFeed[2502:f803] creating blank picture 
2012-08-07 08:21:54.157 JSONFeed[2502:f803] Number: 0, URL: (null) 
2012-08-07 08:21:54.157 JSONFeed[2502:f803] url: http://photos-a.ak.fbcdn.net/hphotos-ak-ash4/423482_427478620624383_82270372_s.jpg 
2012-08-07 08:21:54.158 JSONFeed[2502:f803] Number: 0, URL: (null) 
2012-08-07 08:21:54.158 JSONFeed[2502:f803] creating blank picture 

SharedStore는 메시지를 저장하기 위해 만든 ItemStore 클래스의 일부이다 Facebook 게시물의 사진 질문이 있거나 더 많은 코드를 볼 필요가 있으면 언제든지 물어보십시오. 저는 여전히 Apps 프로그래밍에 익숙하지 않기 때문에 개선을위한 제안도하고 있습니다.

+0

'createPicture'를 호출 할 때 왜 [itemOFForKey : @ "picture"]'대신 [[[object objectForKey : @ "picture"] description]'를 보냅니 까? –

+0

추가 브래킷은 해당 객체에 대한 설명을 호출하기 때문입니다. 이 호출의 나머지 부분은 [[item objectForKey : @ "picture"] description]입니다. – Chance

+0

나는 왜 여분의 괄호가 있는지 알고 있지만 왜'description'을 사용해야합니까? –

답변

3

가능성은 pictures이 0입니다. 배열이 존재하지 않으면 배열에 객체를 추가 할 수 없으며 메시지를 nil로 보낼 수 있습니다. 다시 얻은 결과는 0이나 0이되므로 -objectAtIndex:을 호출하면 "(null)"이 기록됩니다.

+0

고맙습니다, 케일럽. 나는 이것에 신입생 오류를 확실히 만들었다! 배열을 초기화하는 걸 잊었습니다. – Chance

3

1 인 경우, 다음과 같이하면됩니다. 프로그래밍에 대한 모든 배열은 0 색인 당신이 필요로하는 무엇

[array objectAtIndex([array count]-1)]; 
인만큼

[array objectAtIndex:[array count]]; 

당신 때문에 정의 objectAtIndex:array.count함으로써, nil 개체를 가져 가고는, 배열의 범위를 넘어

+0

또는 [배열 lastObject]를 사용하면 쉽게 읽을 수 있습니다 –

+0

@ Dan F, 귀하의 대답은 문제의 실제 해결 방법이 아니지만 코드에서 결함을 지적 했으므로 나는 그것을 반대했습니다. 도와 주셔서 감사합니다! – Chance

관련 문제