繁体   English   中英

无法设置属性

[英]can't set the property

我有一个SourceViewControllerDesViewControllerDesViewController中有一个变量: 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM