将 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 = UIModalTransitionStyleFlipHorizontal; [自我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 将图像传递给另一个视图控制器