objective c-利用临时变量在两个ViewController之间传值

问题描述

利用临时变量在两个ViewController之间传值

临时变量eneity,如有两个ViewController,OneViewController,SecondViewController两个ViewController,跳转正常,从OneViewController利用临时变量eneity发送值到SecondViewController,但是SecondViewController和回传值,利用eneity,OneViewController却得不到,在不用代理的情况下,是否可以利用变量,得到回传值。


补充
现在把代码贴出来:
第一个ViewController,Example3ViewController:

#import "Example3ViewController.h"

@interface Example3ViewController ()

@end

@implementation Example3ViewController
@synthesize editorVC;
@synthesize labelname;
@synthesize labelnumber;
@synthesize labelsummary;
@synthesize b;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    //当不使用IBOutlet时,需要用程序来构造连接
    EditorViewController* vc = [[EditorViewController alloc]initWithNibName:@"EditorViewController" bundle:nil];
    self.editorVC = vc;
    vc = nil;
}

- (void)viewWillAppear:(BOOL)animated{
    NSLog(@"%@",self.b.name);
    self.labelname.text = self.b.name;
    self.labelnumber.text = self.b.number;
    self.labelsummary.text = self.b.summary;
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (IBAction)edit:(id)sender{
    [self presentModalViewController:editorVC animated:YES];
}

@end

第二个ViewController,EditorViewController:

#import "EditorViewController.h"
#import "Example3ViewController.h"
#import "test.h"

@interface EditorViewController ()

@end

@implementation EditorViewController
@synthesize vtitle;
@synthesize number;
@synthesize summary;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (IBAction)done:(id)sender{
    //[[self parentViewController]dismissModalViewControllerAnimated:YES];
    //Example3ViewController* e3v = [[Example3ViewController alloc]init];]

    //e3v.name = title.text;
    //e3v.number = number.text;
    //e3v.summary = summary.text;
    //[self dismissViewControllerAnimated:YES completion:^(void){

    //}];
    test* t = [[test alloc]init];
    t.name = self.vtitle.text;
    t.number = self.number.text;
    t.summary = self.summary.text;
    //[t setName:vtitle.text];
    //[t setNumber:number.text];
    //[t setSummary:summary.text];
    Example3ViewController* e3v = [[Example3ViewController alloc] initWithNibName:@"Example3ViewController" bundle:[NSBundle mainBundle]];
    e3v.b = t;

    [self dismissModalViewControllerAnimated:YES];
    [t release];
    [e3v release];

}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    [vtitle resignFirstResponder];
    [number resignFirstResponder];
    [summary resignFirstResponder];
}
@end

临时变量:

#import "test.h"

@implementation test
@synthesize name;
@synthesize number;
@synthesize summary;
@end

m就贴了

解决方案

你知道问题的根本出在哪里吗?

你在EditorViewController 中的

  • (IBAction)done:(id)sender
    创建了test对象实例t,并将t实例传给了Example3ViewController类型的e3v 对象的b 属性. 接下来你并没有显示Example3ViewController的view
    而只是实例化了一个e3v对象,我们知道通过Nib来创建控制器实例,只会调用控制器的
  • (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 方法
    只有当控制器的视图将要被呈现到屏幕中去的时候才会调用控制器的
  • (void)viewWillAppear:(BOOL)animated 方法
    所以Example3ViewController中的viewWillAppear 方法根本就没有被执行,故此你没有看到视图上的uilabel被赋值.

    其根本原因还是出在了,你认为Example3ViewController 在内存中是一个持久对象

    解决方案:

    解决的方法不只是一种,你可以在EditorViewController 中添加一个对Example3ViewController的引用.
    最好的方案还是使用代理.优势是解藕,不那么紧依赖

解决方案二:

首先添加object到Application Delegate。

然后创建它的属性property。

然后用appDelegate 的object 访问object,并且随时初始化,像这样:

AppDelegate *objAppDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
//像这样进行初始化
objAppDelegate.yourObject = some value;
// 或者像这样提供值
id newObject =  objAppDelegate.yourObject

在应用中的任何一个控制器中可使用这个object。

时间: 2024-12-31 02:03:31

objective c-利用临时变量在两个ViewController之间传值的相关文章

Javascript showModalDialog两个窗体之间传值_javascript技巧

Javascript 两个窗体之间传值实现代码javascript中还有一个函数window.showModalDialog也可以打开一个新窗体,不过他打开的是一个模态窗口,那么如何在父窗体和子窗体之间传值呢?我们先看该函数的定义:vReturnValue = window.showModalDialog(sURL [, vArguments] [,sFeatures]) 参数说明: sURL--必选参数,类型:字符串.用来指定对话框要显示的文档的URL. vArguments--可选参数,类型

界面-急求!!!!如何实现两个自定义控件之间传值

问题描述 急求!!!!如何实现两个自定义控件之间传值 最近做一个项目,需要写手势解锁,借鉴了网上的代码,但是要求的效果是下面实现滑动解锁,上面还有一个gestureview实现显示密码输入提示,自然而然我就想到在xml中画了两个gestureview,画面效果是实现了,可是突然发现两个界面之间不知道怎么传递数据,如果不实时传入下面gestureview的手势密码,那么上面就不能绘制相应的图形,请大牛帮我想个办法啊 我是新人,没什么c币 回头会补上的 解决方案 GetPostBackEventRe

c#窗体-c#两个窗口之间传值,虽然简单,但我仍不会,请各位大神帮忙

问题描述 c#两个窗口之间传值,虽然简单,但我仍不会,请各位大神帮忙 在一个窗口的button按钮中点击,另一个窗口的checkbox被选中,该咋写 解决方案 http://bbs.csdn.net/topics/360140208 解决方案二: 另一个窗体添加一个属性 public bool IsSelected { get { return checkBox1.Checked; } set { checkBox1.Checked = value; } } 主窗体 (Application.O

ios-在两个viewcontroller之间的delegation有问题

问题描述 在两个viewcontroller之间的delegation有问题 第一个viewcontroller是排行榜菜单,里面有一个按钮指示到第二个viewcontroller中第二个是小游戏,如果玩家输了,最高分变动,就更新排行榜.在玩家完成游戏时建了带两个按钮的UIAlertView,一个是主菜单,另一个是重新开始,我的代码如下:我想通过delegation更新排行榜 @protocol highScoreProtocol <NSObject> -(void)updateHighSco

算法研究之不使用临时变量实现两个值的交换

变量值的交换经常在程序中使用,一般方法是使用一个临时变量,交换两个数的值,其实,不使用临时变量,依然可以实现这一功能. 1.常规交换方法 int a,b,temp; temp=a; a=b; b=temp; 2.通过指针 1: inline void Swap(int *a,int *b) 2: { 3: *a=*a+*b; 4: *b=*a-*b; 5: *a=*a-*b; 6: } 两个人交换苹果和桔子但是每人只有一个手,也不借助其它的容器,那如何进行呢,有办法,就只是用一个手拿两样东西,也

Javascript 两个窗体之间传值实现代码_javascript技巧

如我们新建窗体FatherPage.htm: XML-Code: 复制代码 代码如下: <script type="text/javascript"> function OpenChildWindow() { window.open('ChildPage.htm'); } </script> <input type="text" id="txtInput" /> <input type="but

双路录像利用静态变量做多对象之间简单写互斥

双路录像利用静态变量做多对象之间简单写互斥        笔者目前在研的项目是基于android6.0的智能后视镜产品,目前存在前视录像跟后视录像的功能,存储的文件路径都是保持到外部的同一张SD卡上的.我们都有一个这样的经验:比如往SD卡拷文件,比如2个文件都是50M,先拷贝第一个50M文件完成后,再拷贝另外一个50M的文件,这样拷贝这2个总共100M文件花费的时间比会先拷贝一个50M文件,在还没有完成拷贝第一个文件的时候就复制拷贝第二个50M的文件到SD卡上等它完成拷贝花费的总时间要少.: /

PHP中应该避免使用同名变量(拆分临时变量)_php技巧

当一个临时变量被赋值多次时,那么将其拆分成多个,除非它是一个循环计数器. Motivation 临时变量有这多种不同的用途.比如它们可被用作循环中的计数器,在循环中保存结果集,亦或保存一个冗长的表达式的计算结果等等. 这些类型的变量(容器)应该只赋值一次.如果一个同名的临时变量被赋予多个职责,将会影响代码的可读性.这个时候我们应当引入一个新的临时变量以使代码更加清晰易懂. 可能有些注重性能的人会说,引入一个新的变量将会占用更多的内存.的确如此,但是注册一个新的变量不会吸干服务器内存的,这一点请放

c++-C++引用变量问题,函数中临时变量返回引用

问题描述 C++引用变量问题,函数中临时变量返回引用 C++ primer plus第六版引用一节,说不能在函数中新建一个变量,并将其引用返回.道理我都懂,就是说函数调用完后,那部分临时内存会释放.可是为什么我自己写的下述代码不报错,反而能正常运行呢? #include using namespace std; struct free_throws //此处定义一个结构体 { int i; }; const free_throws & clone2(free_throws & ft1, f