我有一个SourceViewController
和一个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'
有人可以帮助我吗?
答案 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"];