iOS:无法在字符串中存储字符串

时间:2012-08-07 13:25:18

标签: objective-c ios json

我正在开发一款适用于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帖子的消息和图片。如果您有任何疑问,或需要查看更多代码,请随时提出。我也正在采取任何改进建议,因为我还是编程应用程序的新手。

2 个答案:

答案 0 :(得分:3)

一种可能性是pictures为零。如果阵列不存在,则无法将对象添加到数组,并且将消息发送到nil是合法的。您获得的结果也将为零或零,因此您对-objectAtIndex:的调用会记录“(null)”。

答案 1 :(得分:3)

首先,当你做这样的事情时;

[array objectAtIndex:[array count]];

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

您需要的是

[array objectAtIndex([array count]-1)];