2014-03-30 63 views
0

我的NSMutableArray正在丟失我從Facebook搜索中添加的所有數據。我已經循環遍歷每個迭代循環正確運行並添加所有數據,但一旦執行此代碼,我的NSMutableArrays恢復爲零對象。它有什麼需要做的,所有的添加發生在請求連接內?雖然陣列被剝離並初始化,但我不明白爲什麼會出現這個問題。任何幫助感謝!NSMutableArray丟失所有對象

在我viewDidLoad中

_namesArray = [[NSMutableArray alloc] init]; 
_categoryArray = [[NSMutableArray alloc] init]; 
[FBRequestConnection startWithGraphPath:@"search?q=food&type=place&center=51.89,-8.472&distance=1000" completionHandler:^(FBRequestConnection *connection, id result, NSError *error) { 
    if (!error) { 
     NSLog([NSString stringWithFormat:@"user events: %@", result]); 
     NSArray *test = [result objectForKey:@"data"]; 
     for (FBGraphObject *obj in test) { 
      if ([obj objectForKey:@"category"]){ 
       [_namesArray addObject:[obj objectForKey:@"category"]]; 
      } 
      if ([obj objectForKey:@"name"]){ 
       [_categoryArray addObject:[obj objectForKey:@"name"]]; 
      } 
     } 
    } else { 
     NSLog([NSString stringWithFormat:@"error %@", error.description]); 
    } 

}]; 

頭文件

@property (strong, nonatomic) NSMutableArray *namesArray; 
@property (strong, nonatomic) NSMutableArray *categoryArray; 
+0

你在哪裏測試數組? – CodaFi

+0

最後我想用一個數組來設置一個'UITableViewController'的大小,但是如果我在我的ViewDidLoad的代碼中直接設置了一個斷點,我的數組是空的 – Killian

+0

那東西不是基本塊,它是一個Objective-C塊。它內部的代碼並不像其他所有東西一樣按順序執行,而是在Facebook的圖形API請求完成時執行。嘗試在塊中記錄*。 – CodaFi

回答

0

陣列得到填補與異步執行中completionHandler元素。看起來您的問題的原因是您嘗試訪問completionHandler以外的陣列。實際上你應該使用completionHandler內的數組或者從這個模塊開始另一種方法。

_namesArray = [[NSMutableArray alloc] init]; 
_categoryArray = [[NSMutableArray alloc] init]; 

// 1 - Start request 
[FBRequestConnection startWithGraphPath:@"search?q=food&type=place&center=51.89,-8.472&distance=1000" completionHandler:^(FBRequestConnection *connection, id result, NSError *error) { 
    // 3 - request is finished. Fill the arrays 

    if (!error) { 
     NSLog([NSString stringWithFormat:@"user events: %@", result]); 
     NSArray *test = [result objectForKey:@"data"]; 
     for (FBGraphObject *obj in test) { 
      if ([obj objectForKey:@"category"]){ 
       [_namesArray addObject:[obj objectForKey:@"category"]]; 
      } 
      if ([obj objectForKey:@"name"]){ 
       [_categoryArray addObject:[obj objectForKey:@"name"]]; 
      } 
     } 
    } else { 
     NSLog([NSString stringWithFormat:@"error %@", error.description]); 
    } 

    // Use arrays. For example, reload UITableView 
    [_tableView reloadData]; 

}]; 

// 2 - now request is not finished yet 
+0

重新加載表視圖工作完美!非常感謝 – Killian

0

我敢打賭,你是誤會執行

//Point 1. ode executed first 
[FBRequestConnection startWithGraphPath:@"search?q=food&type=place&center=51.89,-8.472&distance=1000" 
    completionHandler: ^(FBRequestConnection *connection, id result, NSError *error) 
    { 
    //Point 3. Code executed last, once the network request is finished. 
    } 
//Point 2. Code executed second 

的流量如果你在2點檢查你的陣列,它們不會被尚未填充。直到完成處理程序在一段時間後觸發後,數組纔會被填充。