在prepareForSegue中设置目标视图控制器的NSNumber属性时出错

时间:2012-01-03 20:43:41

标签: iphone storyboard automatic-ref-counting

我有一个模态视图控制器,它试图设置源视图控制器的标志(NSNumber属性),该标志在其prepareForSegue方法中调用它。它无法构建错误“没有已知的选择器实例方法'setGoToEditNewNote:'”。这是代码:

源视图控制器.h:

@property (strong, nonatomic) NSNumber *goToEditNewNote;

源视图控制器.m:

@synthesize goToEditNewNote;
...

- (void)viewDidLoad
{
[super viewDidLoad];
    // clear the flag
    goToEditNewNote = [[NSNumber alloc] initWithBool:FALSE];
...

- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
    if ([goToEditNewNote boolValue] == TRUE) {
        goToEditNewNote = FALSE;
        [self performSegueWithIdentifier: @"editNote" sender: self];
...

模态视图控制器.h:

模态视图控制器.m:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"done"]) 
    {
        [self done];
        [[segue destinationViewController] setGoToEditNewNote:TRUE]; <<< get error here
    }
}

我怀疑问题可能与加载模态视图时没有保留goToEditNewNote有关,但我不明白为什么不。我已经以类似的方式设置了其他属性,例如managedObjectContext,但是成功了。因为我是ARC的新手,请在答案中尽可能具体。谢谢 - 汤姆

3 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。我花了2天时间在网上找不到合适的答案。奇怪的是,斯坦福CS193p中的相同代码正在运行。幸运的是我现在解决了!找不到“set属性方法”错误的原因是忘记了#import "xxxx.h",其中xxxx是segue的目标视图控制器的名称。如果您没有导入,它永远不知道xxxx的属性是什么!

很简单,现在segue工作了。

答案 1 :(得分:0)

首先,如果你使用ARC,你永远不必使用retain(或发布)。您只需要实例化一个Object,但您不必关心删除它。但是如果对象在一个圆圈中相互引用,请注意。如果A引用B,B引用C,C引用A并且您通过变量D(位于A)访问这些变量,并且您不再使用D,A-B-C的圆圈将保留在内存中。然后你必须将其中一个A-B-C参考定义为'弱'。

但是对于您真正的问题:您是否有可能错过了实施文件中的@synthesize语句?

答案 2 :(得分:0)

错误告诉您没有任何与"setGoToEditNewNote:"选择器对应的实例方法;你有没有@synthesize你的财产(或自己写访问者)?