1

AppDelegate.h ファイルに NSMutableString が定義されています。

//AppDelegate.h
@interface AppDelegate : UIResponder <UIApplicationDelegate>{
  @public
    NSMutableString *nidForDetailDisplay;
}

次に、この文字列を ViewController.m ファイルに設定します。テーブルビューから詳細ビューに渡す文字列 (nidForDetailDisplay) を格納しています。

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

  rowNumber = indexPath.row;

  AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
      // this is where I set the string to a string of text
    appDelegate->theNidForDetailDisplay = [arrayOfNids objectAtIndex:rowNumber];

  UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
  UIViewController *detailViewController;

  DetailViewController *detail = [self.storyboard instantiateViewControllerWithIdentifier:@"detail"];

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

 }

ViewController で theNidForDetailDisplay をログに記録すると、正しい文字列が得られます。

次に、後続の DetailViewController で、この更新された NSMutableString (nidForDetailDisplay) にアクセスしようとします。

-(void)viewWillAppear:(BOOL)animated {

[super viewWillAppear:animated];

 NSMutableString *storyid;

 AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];        
 appDelegate->theNidOnDetailDisplay = storyid;
 }

ただし、文字列 (storyid) または (theNidOnDetailDisplay) を出力すると、両方とも null が返されます。

ここで何か不足していますか?インスタンス変数を使用する必要がありますか? 前もって感謝します。

4

1 に答える 1

0

AppDelegate を使用してデータを渡さないでください。詳細ビュー コントローラーにプロパティを追加し、プロパティに値を割り当てます。

オンDetailViewController:

@property (nonatomic) NSMutableString * nid;

提示する前に割り当てます。

DetailViewController *detail = [self.storyboard instantiateViewControllerWithIdentifier:@"detail"];
detail.nid = [arrayOfNids objectAtIndex:rowNumber];
[self.navigationController pushViewController:detail animated:YES];
于 2013-04-22T06:04:22.420 に答える