2015-11-18 65 views
0

我有一個關於如何在completionHandler塊中設置我的NSArray的問題。我成功地爲我的完成塊中的NSArray賦值,但是一旦我嘗試NSLog NSArray值超出完成塊,它會給出0.如何在completionHandler中設置一個值?

這是我的完整代碼。

// 
// 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 

在此先感謝。

+0

確保在完成塊完成之後記錄數組 – ibnetariq

+1

爲什麼要創建一個空數組,然後在下一個語句中拋出它? – Avi

+0

通過聲明__block檢查NSArray * pagesInfo;而不是NSArray * pagesInfo; –

回答

1

按照@michal,你應該低於刷新你的tableView這樣的:

- (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 = pagesResult[@"data"]; 
    [yourTableViewObj reloadData]; 
    // NSArray *p = pagesResult[@"data"]; 
    // [self pages:p]; 
    }]; 
} 

希望這將有助於。

+0

他不需要「'pagesInfo = [[NSArray alloc ] init];'「行,因爲它在下一行被重寫/重置。 –

2

當完成塊完成時重新載入您的表格視圖,您應該看到您的pagesInfo數組已填充並返回一個計數。

+0

)在返回一個數組之前,你永遠不必檢查,如果數組引用是nil,[array count]的返回值爲零 – Avi

相關問題