0

TableViewCellから別のViewControllerにデータを渡そうとしていますが、別のViewControllerにデータが表示されていません。これが私のコードです

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{


   PeripheralManager *objSelected=[device objectAtIndex:indexPath.row];

   [self prepareForSegue:@"TableDetails" sender:objSelectedDevice];
 }


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


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


   DetailViewController *detail=segue.destinationViewController;
   detail.dataArray=device;
   }

 }

エラーメッセージ

nested push animation can result in corrupted navigation bar
2012-10-24 12:01:39.805 [3182:707] nested push animation can result in corrupted navigation bar
2012-10-24 12:01:40.164 [3182:707] Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.
2012-10-24 12:01:40.167 [3182:707] Finishing up a get navigation transition in an unexpected state. Navigation Bar subview tree might corrupted.
4

4 に答える 4

4

これは必要ありません:

[self.navigationController pushViewController:mdc animated:YES];

それがSegue自動的に行うことです

また、View Controller をロードする 3 行があります。コメントについては以下を参照してください。

NSInteger row=[indexPath row];
NSString *value=[device objectAtIndex:row];
MeBleDetailViewController *mdc=[self.storyboard instantiateViewControllerWithIdentifier:@"MeBleDetailViewController"];  
mdc.deviceName=value;
[self presentModalViewController:mdc animated:YES];    // Load ViewController
[UIView commitAnimations];
[self performSegueWithIdentifier:@"TableDetails" sender:[device objectAtIndex:indexPath.row]];    // Load ViewController
[self.navigationController pushViewController:mdc animated:YES];   // Load ViewController

そのため、エラーが発生しています:ネストされたプッシュアニメーションにより、ナビゲーション バーが破損する可能性があります

また、テーブル セルから別のビュー コントローラーへのセグエを構成した場合、didSelectRowAtIndexPathメソッドには何も必要ありません。


編集:

プッシュされたView Controllerに必要なデータは何でも-prepareforSegue代わりにメソッドに入れますdidSelectRowAtIndexPath

テーブルセルからView Controllerへのセグエを作成する場合、このメソッドはセグエをプログラムで実行するため、次を実行する必要はありません。

[self performSegueWithIdentifier:@"TableDetails" sender:[device objectAtIndex:indexPath.row]];

于 2012-10-24T04:19:22.470 に答える
1

余分なコードを削除するこれだけを行う-

DetailViewController.h

@property(nonatomic, retain)NSMutableArray *dataArray;

DetailViewController.m

@synthesize dataArray = _dataArray;

今これTableViewController.mを書いてください-

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
   if([segue.identifier isEqualToString:@"TableDetails"])
   {
     DetailViewController *detailViewObject = segue.destinationViewController;
     detailViewObject.dataArray = anyArray;
   }
}

ここで私は通過してNSMutableArrayいます。

于 2012-10-24T09:04:05.510 に答える
1

わかった。2 つのビューコントローラーFirstViewControllerとがあるとしSecondViewControllerます。FirstViewControllerテーブルビューともちろんテーブルビューセルがあります。SecondViewControllerデータを表示する必要があります。したがって、SecondViewController.hいくつかの変数のプロパティを設定する必要があります。この場合はidタイプ@property (strong, nonatomic) id secDetailItem;です。それを合成して、SecondViewController.mこのようなsetterメソッドを追加します

-(void)setDetdetailItem:(id)newSecdetailItem{
if (secDetailItem != newSecdetailItem) {
    secDetailItem = newSecdetailItem;

    // Update the view.
     [self configureView];//This method is needed to update view if there are some changes in that view.
}
}

次に、プロパティをFirstViewController.hインポート SecondViewController.hして追加し@property (strong, nonatomic) SecondViewController *secondViewController;、合成します。このFirstViewController.mデリゲート メソッドのファイルで、次の操作を行います。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
 self.secondViewController.secDetailItem=//set your data should be passed.

// また、viewcontroller add をプッシュする必要がある場合pushviewcontroller:SecondViewController、または IB を使用して tableview セルと SecondViewController をプッシュ メソッドで接続します。}

この場合、perform segue を使用する必要はありません。何かを設定するとすぐに、Setter メソッドが機能しますsecDetailItem

また、ビューを更新する必要がある場合はSecondViewController、このメソッドを追加してください。

- (void)configureView

{

if (self.secDetailItem) {
    self.textLabel.text=self.secDetailItem;//Data passed from FirstViewController
}

}

これだけで十分です。複雑な場合は申し訳ありません。どんな質問でもしてください。

于 2012-10-24T09:03:51.367 に答える
-1

次の行と関係がある可能性があります。

[UIView commitAnimations];

不要な場合は削除できます。

于 2012-10-24T04:18:47.253 に答える