2016-12-29 8 views
0

介してアレイ内の述語のインデックス位置を経て得られたfilteredArrayを送信する方法は次の:は、私は2つのアレイ、Iは、サーバからの応答として、私はpredicates.asを使用してアレイをフィルタリングすることによって得られた他のものを入手したものを持っているセグエ

-(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"; 

} 

今、私はの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が実際に送信したい表示しますreviewdataArrayのfilteredReviewdataArrayアイテムのインデックス位置を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はdidSelectRowの前に「準備」を呼び出します。間違っています。

は、ブレークポイントを配置し、それを試してみてください。

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

} 


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

} 

あなたは流れが異なっている見ることができるように。次のように行い、サンプル作品を作るために

を(カスタムセルを使用する場合にのみ、それは動作します):{

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

オーバーライドは、FUNC(任意:UIStoryboardSegue、送信者?セグエのための)準備します}

とdidSelectを使用しないでください。

+0

私はカスタムセルを使用しています...しかし、それはまた別のフローに基づいて動作していません(最初にセグを準備してから選択しました)。客観的なcで使用される? – TestShroff

関連する問題