我有一个模态视图控制器,它试图设置源视图控制器的标志(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的新手,请在答案中尽可能具体。谢谢 - 汤姆
答案 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你的财产(或自己写访问者)?