我有一个对我来说很奇怪的问题(对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。
真的很感激,如果有人能够教育我这里发生的事情。
谢谢, 标记
答案 0 :(得分:1)
您是否初始化了self.newsItems 喜欢 self.newsItems = [[NSMutableArray alloc] init]; 在viewDidLoad中,您也可以尝试使用loadInitialData。 请检查 其他的东西看起来不错希望这可以帮助。 让我知道输出数组或数组计数。
答案 1 :(得分:0)
创建一个可变数组。
- (void)loadInitialData {
self.newsItems = [NSMutableArray new];
//Rest of your code here