也许是一种复杂的措辞。
应该发生什么的过程:
partial curl
FirstViewController
中设置了一个属性,无论单击的是哪个单元格FirstViewController
的回调方法中,您可以访问该属性以确定下一个执行阶段。但是,在设置属性并尝试检索它时,它将返回NULL
。以下是我尝试设置它的方法:
FirstViewController.h
:
@interface FirstViewController : UIViewController
{
NSString *navOption;
}
@property(nonatomic, retain) NSString *navOption;
FirstViewController.m
(回调):
@synthesize navOption;
-(void)callBackForNav{
NSLog(@"Inside callback: %@", navOption);
}
在SecondViewController
:
FirstViewController *dw = [[FirstViewController alloc]
initWithNibName:nil bundle:nil];
dw.navOption = @"Filter Results";
我希望在回调navOption
中等于过滤结果,但它输出为NULL
。我出错的任何想法?
答案 0 :(得分:3)
如果我理解了这一点,那么您就会FirstViewController
出现SecondViewController
。我在代码中分配navOption
时看到的问题是SecondViewController
创建了一个新的FirstViewController
,而不是引用旧的FirstViewController
。因此,当您弹出堆栈并返回原始// MyClass.h
@interface MyClass {
}
+(NSObject*) theObject;
// MyClass.m
+(NSObject*) theObject
{
static NSObject* staticObject = nil;
if (staticObject == nil)
{
// create object
}
return staticObject;
}
时,数据未设置在其上,因为它的实例不同。
现在我看到你正在尝试使用类属性做一些事情,但是我不确定这是否是正确的方法,你应该专注于获取对原始视图控制器的引用并在那里设置属性。 / p>
如果你真的想要一个班级"属性"你必须做这样的事情。
{{1}}
答案 1 :(得分:0)
将@synthesize更改为
@synthesize navOption = navOption;
默认情况下,@ synthensize会创建一个带下划线前缀的实例变量。因此navOption
属性不使用navOption
实例变量。相反,它使用名为_navOption
的实例变量。
你应该做的是删除实例变量和@synthesize并始终使用属性。
FirstViewController.h:
@interface FirstViewController : UIViewController
@property(nonatomic, retain) NSString *navOption;
FirstViewController.m(回调):
-(void)callBackForNav{
NSLog(@"Inside callback: %@", self.navOption);
}
答案 2 :(得分:0)
使用此代码:
@interface FirstViewController : UIViewController
{
NSString *navOption;
}
@property(nonatomic, retain) NSString *navOption;
您正在声明实例变量“navOption”和属性“navOption”。它们是两个完全独立的变量。
这行代码:
dw.navOption = @"Filter Results";
设置navOption属性的值。设置实例变量的语法是dw->navOption = @"Filter Results"
。
这行代码:
NSLog(@"Inside callback: %@", navOption);
正在读取您从未设置的实例变量。读取属性的代码是self.navOption
,而不仅仅是navOption
。
解决方案不是使用实例变量,因为除非您需要极端性能(在这种情况下,您应该使用C而不是Objective-C),因此不建议使用它们。基本上,实例变量是一种在现代编程中很少使用的语言特性,但它仍然存在并且过去经常使用它们。
更改您的NSLog以打印self.navOption
并删除这两行代码:
NSString *navOption; // in the .h file
@synthesize navOption; // in the .m file.