0

我正在为 iPhone 开发一个 Facebook Feed 应用程序,除其他外,它可以确定图片是否附加到帖子,并将其存储在数组中。当我运行代码时,我的 NSLogs 告诉我没有任何东西被放入数组中,即使它正在读取是否存在 objectAtKey:@"picture"。以下是我的一些代码。

来自 MasterView.m:

//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 帖子的消息和图片。如果您有任何问题,或者需要查看更多代码,请随时提问。我也在接受任何改进建议,因为我对应用程序编程还是新手。

4

2 回答 2

3

一种可能性是pictures零。如果数组不存在,则不能将对象添加到数组中,并且向 nil 发送消息是合法的。您返回的结果也将为零或零,因此您对-objectAtIndex:日志的调用“(null)”。

于 2012-08-07T13:29:27.050 回答
3

一方面,当你做这样的事情时;

[array objectAtIndex:[array count]];

您将获得一个nil对象,因为根据定义objectAtIndex:array.count超出了数组的范围,因为编程中的所有数组都是 0-indexed

你需要的是

[array objectAtIndex([array count]-1)];
于 2012-08-07T13:32:40.643 回答