【发布时间】:2015-11-18 09:46:18
【问题描述】:
我有一个关于如何在 completionHandler 块中设置我的 NSArray 的问题。我成功地在我的完成块中为 NSArray 分配了一个值,但是一旦我尝试在完成块之外的 NSLog NSArray 值它给出了 0。
这是我的完整代码。
//
// HomeTVC.m
// ABOX
//
// Created by Zero on 11/18/15.
// Copyright © 2015 Zero. All rights reserved.
//
#import "HomeTVC.h"
#import "facebook.h"
@interface HomeTVC ()<UITableViewDataSource, UITableViewDelegate>
{
NSDictionary *userPageLikesParams;
NSArray *pagesInfo;
facebook *fb;
}
@end
@implementation HomeTVC
- (void)viewDidLoad {
[super viewDidLoad];
self.tableView.delegate = self;
self.tableView.dataSource = self;
fb = [[facebook alloc] init];
userPageLikesParams = @{@"fields": @"about,name,created_time",@"limit": @"5"} ;
[fb getUserPagelikes:userPageLikesParams completionHandler:^(NSDictionary *pagesResult) {
pagesInfo = [[NSArray alloc] init];
pagesInfo = pagesResult[@"data"];
// NSArray *p = pagesResult[@"data"];
// [self pages:p];
}];
}
//- (void)pages:(NSArray*)pageInfo {
//
// self.pagesInfo = pageInfo;
// NSLog(@"fb pages result ayam : %@", self.pagesInfo[0]);
// NSLog(@"array counzz : %d", (int)self.pagesInfo.count);
//}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
// here I got 0, how can I solve this problem?
NSLog(@"table count : %d", (int)pagesInfo.count);
return 5;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
// Configure the cell...
return cell;
}
@end
提前致谢。
【问题讨论】:
-
确保在完成块完成后记录数组
-
为什么要创建一个空数组,然后在下一条语句中将其丢弃?
-
通过声明 __block NSArray *pagesInfo; 进行检查而不是 NSArray *pagesInfo;
-
当页面信息数组有值时,只需在“getUserPagelikes”块中重新加载您的表格视图
-
谢谢大家,现在它可以按照我的意愿完美运行。 duhhh 因为愚蠢的错误,我浪费了 3 个小时的时间。 :(
标签: ios objective-c iphone facebook uitableview