无法从for循环调用方法

时间:2014-04-17 08:09:53

标签: ios objective-c arrays listview

我有一个对我来说很奇怪的问题(对Objective-C不熟悉),但对专家来说可能是显而易见的。

所以我有一个ViewController,它有一个方法可以将项添加到链接到ListView的NSMutableArray。我们的想法是通过使用AFNetworking调用WebService URL来填充它。

NSMutable数组的定义如下:

@property NSMutableArray *newsItems;

然后我创建了一个向数组添加对象的方法:

- (void)addNewsItemWithId:(NSInteger)newsId withMessage:(NSString *)message withDate:(NSString *)date {
    SCWNewsItem *item = [[SCWNewsItem alloc] init];
    item.id = newsId;
    item.date = date;
    item.preview = message;
    [self.newsItems addObject:item];
}

然后我有另一个名为loadInitialData的方法,它将数据加载到数组中。

如果我这样测试:

- (void)loadInitialData {
    [self addNewsItemWithId:1 withMessage:@"A first message" withDate:@"2014-04-17"];
    [self addNewsItemWithId:2 withMessage:@"A second message" withDate:@"2014-04-17"];
}

它会正常工作。我可以在ListView中运行和查看这两条消息。

但是,如果我尝试这样做,它就不会添加任何内容:

- (void)loadInitialData {

    NSLog(@"URL: %@", URL_GET_NEWS_ITEMS);

    NSString *token = scwData.authToken;
    if (token == nil) {
        [self returnToLogin];
    }
    else {
        AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
        [manager.requestSerializer setValue:[NSString stringWithFormat:@"Token %@", token] forHTTPHeaderField:@"Authorization"];

        [manager GET:URL_GET_NEWS_ITEMS parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
            for (NSDictionary *arr in responseObject) {
                NSInteger itemId = [[arr valueForKey:@"id"] intValue];
                NSString *name = [arr valueForKey:@"author_name"];
                NSString *date = [arr valueForKeyPath:@"date_posted"];
                NSString *message = [arr valueForKey:@"message"];

                NSLog(@"itemId: %i", itemId); 

                [self addNewsItemWithId:itemId withMessage:message withDate:date];
            }

        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
            NSLog(@"Failed: %@", operation.responseObject);
        }];
    }
}

我可以从使用NSLog看到循环肯定是被迭代的,并且JSON数组中的每个属性都被输出到我的日志中,但它只是不会将任何项添加到我的ListView。

真的很感激,如果有人能够教育我这里发生的事情。

谢谢, 标记

2 个答案:

答案 0 :(得分:1)

您是否初始化了self.newsItems 喜欢 self.newsItems = [[NSMutableArray alloc] init]; 在viewDidLoad中,您也可以尝试使用loadInitialData。 请检查 其他的东西看起来不错希望这可以帮助。 让我知道输出数组或数组计数。

答案 1 :(得分:0)

创建一个可变数组。

- (void)loadInitialData {
   self.newsItems = [NSMutableArray new];
   //Rest of your code here