[英]can't set the property
我有一个SourceViewController
和DesViewController
, DesViewController
中有一个变量: DesViewController
@property ( nonatomic , assign , readwrite ) NSString* name ;
但是当我在SourceViewController中调用方法时,这是一个问题:
-(void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender {
UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil ] ;
DestinationViewController* desViewController = [storyboard instantiateInitialViewController ] ;
desViewController.name = @"haah" ;
[self presentViewController:desViewController animated:YES completion:nil ] ;
}
输出 :
'NSInvalidArgumentException', reason: '-[SourceViewController setName:]: unrecognized selector sent to instance 0x6a0d7c0'
有人可以帮我吗?
下面的代码行:
[storyboard instantiateInitialViewController ] ;
它返回SourceViewController。 这是因为它被设置为您的初始viewController。 但是,您将其视为DestinationViewController
。 因此出现了问题。
更改您的初始控制器或为SourceViewController
声明并合成属性。
您正在尝试从DestinationViewController
加入时,正在初始化SourceViewController
属性。
您需要为DestinationViewController
创建属性。
现在,您实例化的viewcontroller似乎不是DestinationViewcontroller类的(因为您的初始viewController似乎不是该类的)。 所以它没有那个属性。 您必须实例化正确的类(请参见下文)。 还要检查是否在DestinationViewcontroller的实现中综合了属性。
附带说明:尽管您可能只想将字符串变量分配给新值,但大多数情况下,您还是想使用copy而不是在NStrings上分配。 另外,由于默认行为,因此不需要读写。 因此,最好更改您的属性声明:
@property (nonatomic, copy) NSString *name;
并在实现中检查您是否合成了这样的示例:
@synthesize name = _name;
在您的dealloc中:
[_name release];
另外,如果要统计新项目,请考虑使用ARC。
现在,如果将viewController设为DestinationViewcontroller,它应该可以工作。 最好的方法是
DestinationViewcontroller *dc = [storyboard instantiateViewControllerWithIdentifier:@"identifier of your desviewcontroller"];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.