2016-12-29 48 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