将 NSString 从 View 传递给另一个

Posted

技术标签:

【中文标题】将 NSString 从 View 传递给另一个【英文标题】:Passing a NSString from View to another 【发布时间】:2012-06-02 11:04:07 【问题描述】:

我正在尝试将 NSString 传递给另一个视图。

在我的第一个视图(地图视图)中,我的代码是:

FirstView.m 文件:

导入“FlipsideViewController.h”

-(IBAction) displayDetails:(id) 发件人

MyLocation *ann = [_mapView.selectedAnnotations objectAtIndex:([_mapView.selectedAnnotations count]-1)];

FlipsideViewController *flipsideViewController;
flipsideViewController=  [[FlipsideViewController alloc]init];
flipsideViewController.details =ann.name;
NSLog(@"ann.name:%@", ann.name);
NSLog(@"details:%@", flipsideViewController.details);

FlipsideViewController *controller = [[FlipsideViewController alloc] initWithNibName:@"details" bundle:nil];
    controller.delegate = self;     
  controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [self presentModalViewController:controller animated:YES];
    [controller release]; 

和 NSlog 打印正确的字符串。但是当我尝试将该字符串传递给名为 details 的 SecondViewController 字符串时:

在我的 FlipsideViewController.h 中定义:

NSString *details;

@property (nonatomic, strong) NSString *details;

在 FlipsideViewController.m 中

@synthesize 详细信息; //每当我输入日志时,它都会打印空值

值:NSLog(@"********** ****detalli %@",detalli);

我的错在哪里?

【问题讨论】:

向我们展示了如何将字符串传递给第二个 ViewController 嗨 iArezki,NSlog 在同一个函数中返回空值。 【参考方案1】:

在secondViewController中添加一个属性,一个NSString类型的保留属性 要添加属性,请阅读以下内容

http://cocoacast.com/?q=node/103

请编辑此部分

FlipsideViewController *flipsideViewController;
flipsideViewController=  [[FlipsideViewController alloc]init];
flipsideViewController.details =ann.name;
NSLog(@"ann.name:%@", ann.name);
NSLog(@"details:%@", flipsideViewController.details);

FlipsideViewController *controller = [[FlipsideViewController alloc] initWithNibName:@"details" bundle:nil];
    controller.delegate = self;     
  controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [self presentModalViewController:controller animated:YES];
    [controller release]; 

FlipsideViewController *flipsideViewController;
flipsideViewController=  [[FlipsideViewController alloc]init];
flipsideViewController.details =ann.name;
NSLog(@"ann.name:%@", ann.name);
NSLog(@"details:%@", flipsideViewController.details);

flipsideViewController.delegate = self;     
flipsideViewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:flipsideViewController animated:YES];
[flipsideViewController release];

【讨论】:

在我的第二个视图中,我定义了属性@property (nonatomic, retain) NSString *details;你提到了吗? 是的,所以现在要移动到secondview的时候,必须先调用secondView.details = annotation.name; 我试过了,但它不起作用。在第一个视图中 NSLog(@"value:%@", secondView.details); -> 在第二个视图中返回正确的值BUt:NSLog(@"value:%@", details);返回->null 如何使第二个视图可见?请发布一些代码 嗯,你为什么要分配一个新的视图控制器?为什么把这部分称为 FlipsideViewController *controller = [[FlipsideViewController alloc] initWithNibName:@"details" bundle:nil]; controller.delegate = self; controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizo​​ntal; [自我presentModalViewController:控制器动画:YES]; [控制器发布];【参考方案2】:

试试这个步骤:- 1)首先你在 anotherViewController.h 中创建属性

@property (nonatomic, strong ) NSString *fetchStr;

2) 在 anotherViewController.m 中合成 NSString

@synthesize fetchStr;

3)在firstViewController中使用

anotherViewController *avc =  [[anotherViewController alloc]init];
avc.fetchStr = ann.name;

并打印(NSLog) anotherViewController 中的 fetchStr

【讨论】:

谢谢,它有效。 anotherViewController 方法我没有初始化! ...但仅在第一个视图中。在第二个视图(我需要 fetchStr)中,NSlog 返回 null ... 如果您在 xcode 4.0 中工作,请使用此 avc.fetchStr = [ann.name retain]; 我在 xcode 4.2 上工作。我在第一个视图中尝试了 avc.fetchStr = [ann.name retain],但在第二个视图中 fetchStr 保持不变:s 首先在 firstViewController 中打印 NSLog(@%@",ann.name);【参考方案3】:

做了注释

@property(nonatomic,retain) MyLocation *annotation;

然后将其传递给另一个视图控制器。

它会起作用的。

【讨论】:

以上是关于将 NSString 从 View 传递给另一个的主要内容,如果未能解决你的问题,请参考以下文章

通过 Collection View Cell Swift 中的 segue 将图像传递给另一个视图控制器

如何在不将图像保存在本地的情况下将捕获的图像(Surface View)传递给另一个片段?

将按下的按钮传递给另一个 View JSON

将 json 对象一个组件传递给另一个 vuejs

将值传递给另一个UIViewController

如何将 NSMutableArray 传递给另一个视图