Objective c 无法从其他viewController访问变量
我有一个名为“setTimeViewController”的viewController。我有另一个名为“setEventViewController”的视图控制器。用户在setTimeViewController中点击表中的一行,然后被发送到setEventViewController,该控制器只包含一个UIPickerView和一个保存按钮。当用户点击save按钮时,它会将他们带回setTimeViewController 我希望从setEventViewController的选择器中选择的值能够从setTimeViewController访问,但返回(null)给我。我在.h setEventViewController中声明了一个NSString*theVariable,它是我试图从另一个视图控制器检索的变量,并保留了它的属性,但仍然为null 我已经在setEventViewController中对ViewDidEnglish做了一个测试(NSLog变量),以查看当视图消失时它是否为null,但它应该正常工作 这是我的密码,如果有人能帮助我,我将永远感激。谢谢大家! setEventViewController.mObjective c 无法从其他viewController访问变量,objective-c,ios,xcode,Objective C,Ios,Xcode,我有一个名为“setTimeViewController”的viewController。我有另一个名为“setEventViewController”的视图控制器。用户在setTimeViewController中点击表中的一行,然后被发送到setEventViewController,该控制器只包含一个UIPickerView和一个保存按钮。当用户点击save按钮时,它会将他们带回setTimeViewController 我希望从setEventViewController的选择器中选择的
- (void)pickerView:(UIPickerView *)pickerView
didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
theVariable= [currentItemsInPicker objectAtIndex:row];
//[theVariable retain]; //Tried this as well but did not work
}
-(IBAction) Save
{
//simply dismisses the view controller back to setTimeViewController. Have also tried to set another NSString equal to theVariable but this did not work.
[self.navigationController popViewControllerAnimated:YES];
}
-(void)openSetEventView
{
setEventViewController *eventViewController= [[setEventViewController alloc] init];
// set the delegate
eventViewController.delegate = self;
[self.navigationController pushViewController: eventViewController animated:YES];
[eventViewController release];
}
// get the new value here
-(void)theVariableChanged:(NSString*)theNewValue
{
NSLog (@"the event is %@", theNewValue);
}
setTimeViewController
-(void) retrieveTheEvent
{
setEventViewController *eventViewController= [[setEventViewController alloc] init];
NSString *testString= eventViewController.theVariable;
NSLog (@"the event is %@", testString); //shows null
}
如果我没有错,您正在retrieveTheEvent中分配setEventViewController的不同对象。您正面临此问题,因为此新分配的对象与您推送的对象不同 而不是使用已推送到导航控制器的同一对象 一个解决方案: 在setEventViewController中创建全局对象(即,我的意思是为其创建iVar),并使用相同的引用在didSelectRow中推送视图控制器。并使用相同的iVar访问变量 在setTimeViewController.h中添加以下代码
setEventViewController *eventViewController;
还请为其创建属性
现在进入setTimeViewController.m
现在使用setEventViewController的现有引用来推送视图控制器。像
eventViewController= [[setEventViewController alloc] init];
[self.navigationController pushViewController: eventViewController animated:YES];
更改此方法-(void)retrieveTheEvent
{
NSString*testString=eventViewController.theVariable;
NSLog(@“事件为%@”,testString);//显示null
}
如果我没有错,您正在retrieveTheEvent中分配setEventViewController的不同对象。您正面临此问题,因为此新分配的对象与您推送的对象不同
而不是使用已推送到导航控制器的同一对象
一个解决方案:
在setEventViewController中创建全局对象(即,我的意思是为其创建iVar),并使用相同的引用在didSelectRow中推送视图控制器。并使用相同的iVar访问变量
在setTimeViewController.h中添加以下代码
setEventViewController *eventViewController;
还请为其创建属性
现在进入setTimeViewController.m
现在使用setEventViewController的现有引用来推送视图控制器。像
eventViewController= [[setEventViewController alloc] init];
[self.navigationController pushViewController: eventViewController animated:YES];
更改此方法-(void)retrieveTheEvent
{
NSString*testString=eventViewController.theVariable;
NSLog(@“事件为%@”,testString);//显示null
}
将另一个解决方案添加到Arman的列表中
在setEventViewController.m中创建一个委托,并在调用之前将“变量”传递给setTimeViewController.m
[self.navigationController popViewControllerAnimated:YES];
将另一个解决方案添加到Arman的列表中 在setEventViewController.m中创建一个委托,并在调用之前将“变量”传递给setTimeViewController.m
[self.navigationController popViewControllerAnimated:YES];
我举个例子
setEventViewController.h
@protocol setEventViewControllerDelegate;
@interface setEventViewController : UIViewController
{
NSString* theVariable;
id<setEventViewControllerDelegate> delegate;
}
@end
@protocol setEventViewControllerDelegate <NSObject>
@optional
-(void)theVariableChanged:(NSString*)theNewValue;
@end
#import "setEventViewController.h"
@interface setTimeViewController : UIViewController <setEventViewControllerDelegate>
{
// your members
}
@end
setTimeViewController.h
@protocol setEventViewControllerDelegate;
@interface setEventViewController : UIViewController
{
NSString* theVariable;
id<setEventViewControllerDelegate> delegate;
}
@end
@protocol setEventViewControllerDelegate <NSObject>
@optional
-(void)theVariableChanged:(NSString*)theNewValue;
@end
#import "setEventViewController.h"
@interface setTimeViewController : UIViewController <setEventViewControllerDelegate>
{
// your members
}
@end
我举个例子
setEventViewController.h
@protocol setEventViewControllerDelegate;
@interface setEventViewController : UIViewController
{
NSString* theVariable;
id<setEventViewControllerDelegate> delegate;
}
@end
@protocol setEventViewControllerDelegate <NSObject>
@optional
-(void)theVariableChanged:(NSString*)theNewValue;
@end
#import "setEventViewController.h"
@interface setTimeViewController : UIViewController <setEventViewControllerDelegate>
{
// your members
}
@end
setTimeViewController.h
@protocol setEventViewControllerDelegate;
@interface setEventViewController : UIViewController
{
NSString* theVariable;
id<setEventViewControllerDelegate> delegate;
}
@end
@protocol setEventViewControllerDelegate <NSObject>
@optional
-(void)theVariableChanged:(NSString*)theNewValue;
@end
#import "setEventViewController.h"
@interface setTimeViewController : UIViewController <setEventViewControllerDelegate>
{
// your members
}
@end
看看单身人士
当你做这样的事情时,他们可能是你最好的朋友
查看单身人士
当你做这样的事情时,他们可能是你最好的朋友
我尝试了所有不同的建议,将NSString从一个viewController传递到另一个viewController,包括客户初始化方法,并将属性更改为strong、retain、non,它们中的任何一个都适用于我 最后,singleton在整个项目中共享数据解决了这个问题
感谢@David Evans我尝试了所有不同的建议,将NSString从一个viewController传递到另一个viewController,包括客户初始化方法,并将属性更改为strong、retain和non,它们中的任何一个都适用于我 最后,singleton在整个项目中共享数据解决了这个问题
谢谢@David Evans它在setEventViewController.m中显示的值是否正确?你不能这样做。因为变量的值不能在另一个类中持久化。@Alex G:请检查我的答案,并告诉我是否还能提供帮助。它在setEventViewController.m中显示的值正确吗?你不能这样做。因为变量的值不能在另一个类中持久化。@Alex G:请检查我的答案,并告诉我是否还能提供帮助。但不设置eventViewController*eventViewController=[[setEventViewController alloc]init];给我调用该类中任何变量的权利?谢谢你的回复!正是我需要的。非常感谢你!但是不设置eventViewController*eventViewController=[[setEventViewController alloc]init];给我调用该类中任何变量的权利?谢谢你的回复!正是我需要的。非常感谢你!你能举个例子吗?对不起,我是新手。并且不设置eventViewController*eventViewController=[[setEventViewController alloc]init];给我调用该类中任何变量的权利?谢谢你的回复!你能举个例子吗?对不起,我是新手。并且不设置eventViewController*eventViewController=[[setEventViewController alloc]init];给我调用该类中任何变量的权利?谢谢你的回复!