2016-12-29 27 views
0

在陣列通過謂詞索引位置獲得我有兩個陣列,一個我已經從服務器響應獲得我已通過過濾使用predicates.as數組中取得的另一個的filteredArray如下:如何發送通過賽格瑞

-(void)viewWillAppear:(BOOL)animated{ 
    [super viewWillAppear:animated]; 
    NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:@"Locally"]; 

    reviewdataArray=[[NSMutableArray alloc]init]; 

    reviewdataArray = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 

    NSPredicate *tPredicate = 

    [NSPredicate predicateWithFormat:@"user_id== %@",[[NSUserDefaults standardUserDefaults] stringForKey:@"userId"]]; 

    filteredReviewdataArray=[[NSMutableArray alloc]init]; 

    filteredReviewdataArray = [[reviewdataArray filteredArrayUsingPredicate:tPredicate]mutableCopy]; 
} 

的reviewdataArray回報以下內容:

(

{ 
    Rating = 2; 

    "user_id" = "F2266E5D-C709-42FB-AD98-B75873AC2FD1"; 

}, 

{ 
    Rating = 3; 

    "user_id" = "F2266E5D-C709-42FB-AD98-B75873AC2FD1"; 

}, 

{ Rating = 4; 


    "user_id" = "9fbec513-b598-4593-bed4-fe882f67eb2e"; 

}, 

{ 
    Rating = 1; 

    "user_id" = "7wrs-513-42638-451-bed4-gd23sdgg231"; 

} 

) 

的filteredReviewdataArray返回如下:

{ Rating = 4; 


"user_id" = "9fbec513-b598-4593-bed4-fe882f67eb2e"; 

} 
現在0

,我上的tableView顯示在filteredReviewdataArray這些字典,並通過賽格瑞我送選定行的索引位置類似如下:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 

    if ([[segue identifier] isEqualToString:@"rating"]) { 

     NSIndexPath *index = [self.tableView indexPathForSelectedRow]; 
     TripViewController *tripController = [segue destinationViewController]; 
     tripController.load = FALSE; 
     tripController.index = index; 
    } 

} 

但這顯示錯誤data.I居然要送filterReviewdataArray項目在reviewdataArray中通過segue索引的位置。如何實現?

+0

何時將選定的數據發送到TripViewController? – Joshua

+0

你爲什麼要發送tableview的'index'而不是數據?它對我來說毫無意義 – Tj3n

回答

0

以int類型的一個類變量:

var selectedIndex : Int! 

// Add below code to your `didSelectRowAtIndexPath:` delegate 

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
      //You exixting code...... 
      selectedIndex = indexPath.row; 
    } 

//Update your prepareForSegue: delegate like: 

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 

    if ([[segue identifier] isEqualToString:@"rating"]) { 
     TripViewController *tripController = [segue destinationViewController]; 
     tripController.load = FALSE; 
     tripController.index = selectedIndex; 
    } 

} 
0

以前的答案似乎是正確的,但不能正常工作。 如果你有一個普通的TVCtl和TVCell,iOS會調用didElectRow之前的「prepare」,所以這是錯誤的。

嘗試設置斷點:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 

} 


override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

} 

正如你所看到的流量是不同的。 (它將如果使用自定義單元格纔有效)

,使樣品的作品,請執行以下操作:

覆蓋FUNC準備(對於SEGUE:UIStoryboardSegue,發件人:任何){

if let selected = self.tableView.indexPathForSelectedRow{ 
    let row = selected.row 
} 

}

並且不使用didSelect。

+0

我使用自定義單元格...但它也不能正常工作..因爲不同的流程(先準備好繼續工作,然後做出選擇)....您可以請將方法轉換爲用於目標c? – TestShroff