无法设置属性

时间:2012-06-27 04:04:16

标签: iphone objective-c

我有一个SourceViewController和一个DesViewControllerDesViewController中有一个变量:@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'

有人可以帮助我吗?

3 个答案:

答案 0 :(得分:1)

以下代码行:

[storyboard instantiateInitialViewController ] ;

它返回SourceViewController。这是因为,它被设置为您的初始viewController。 但是,您将其视为DestinationViewController。因此问题。

更改初始控制器或声明并合成SourceViewController的属性。

答案 1 :(得分:0)

您尝试加入SourceViewController时正在DestinationViewController初始化属性。

您需要为DestinationViewController创建属性。

答案 2 :(得分:0)

就像现在一样,你实例化的viewcontroller似乎不是类DestinationViewcontroller(因为你的初始viewController似乎不属于那个类)。所以它没有那个属性。你必须实例化正确的类(见下文)。 还要检查是否在DestinationViewcontroller的实现中合成了该属性。

并且旁注:尽管您可能只想将字符串变量分配给新值,但大多数情况下您希望在NStrings上使用copy而不是assign。此外,由于其默认行为,因此不需要读写。 因此,最好更改您的财产声明:

@property (nonatomic, copy) NSString *name;

在实现中检查你是否合成了这样的例子:

@synthesize name = _name;

在你的dealloc:

[_name release];

另外,如果您统计新项目,请考虑使用ARC。

现在,如果您将viewController设为DestinationViewcontroller,它应该可以工作。 最好的方法是

DestinationViewcontroller *dc = [storyboard instantiateViewControllerWithIdentifier:@"identifier of your desviewcontroller"];