1

我有一个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'

任何人都可以帮助我吗?

4

3 回答 3

1

下面的代码行:

[storyboard instantiateInitialViewController ] ;

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

要么更改您的初始控制器,要么为SourceViewController.

于 2012-06-27T04:33:54.923 回答
0

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

您需要为DestinationViewController.

于 2012-06-27T04:28:05.180 回答
0

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

附带说明:尽管您可能只想将字符串变量分配给一个新值,但大多数时候您希望使用复制而不是在 NStrings 上分配。此外,由于它是默认行为,因此不需要读写。因此,最好这样更改您的属性声明:

@property (nonatomic, copy) NSString *name;

并在实现中检查你是否像这样合成:

@synthesize name = _name;

在你的交易中:

[_name release];

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

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

DestinationViewcontroller *dc = [storyboard instantiateViewControllerWithIdentifier:@"identifier of your desviewcontroller"];
于 2012-06-27T06:35:15.213 回答