Objective c 财产';代表';在对象';增加了视频控制器';
在开发人员库的帮助下,我正在尝试使用EventKit和EventKitUI框架。我很早就遇到了障碍。我已经复制并粘贴了。我已经在我的ViewController中的导航栏中添加了一个名为“AddEventViewController”的视图控制器按钮,我正在使用此代码来调用它Objective c 财产';代表';在对象';增加了视频控制器';,objective-c,ios,xcode,eventkit,Objective C,Ios,Xcode,Eventkit,在开发人员库的帮助下,我正在尝试使用EventKit和EventKitUI框架。我很早就遇到了障碍。我已经复制并粘贴了。我已经在我的ViewController中的导航栏中添加了一个名为“AddEventViewController”的视图控制器按钮,我正在使用此代码来调用它 - (IBAction)add:(id)sender { AddEventViewController *addController = [[AddEventViewController alloc]
- (IBAction)add:(id)sender {
AddEventViewController *addController = [[AddEventViewController alloc]
init];
addController.delegate = self;
UINavigationController *navigationController = [[UINavigationController alloc]
initWithRootViewController:addController];
[self presentViewController:navigationController animated:YES completion: nil];
}
错误显示在第行:addController.delegate=self代码>
此代码直接从库中复制。我正在使用Xcode 4.2和故事板,如果这可能会有所帮助的话
更新:
这是AddEventViewController.h:
#import <UIKit/UIKit.h>
@interface AddEventViewController : UIViewController
@end
#导入
@接口AddEventViewController:UIViewController
@结束
你会告诉我我不正确地创建了这个ViewController吗?如果你这么好的话,请解释为什么不“怎么做?”在Objective-C中,你使用的任何属性都应该在某处声明。在父类(UIViewController
在您的案例中)中声明的任何属性都会被所有派生类(AddEventViewController
在您的案例中)继承
AddEventViewController
继承UIViewController
,但委托
属性既不在第一个属性中声明,也不在第二个属性中声明。这就是编译器不高兴的原因
你应该申报。类似于下一个:
@interface AddEventViewController : UIViewController
@property (nonatomic, assign) id delegate;
@end
@implementation AddEventViewController
@synthesize delegate;
@end
代表通常使用assign
属性声明,以防止圆圈保留(例如A
reservesB
和B
reservesA
)我知道苹果的例子可能会让你感到困惑。首先,下载完整的源代码(或者至少在尝试理解此代码时参考它)
要真正理解这里发生的事情,您需要阅读“解除显示的视图控制器”一节,然后按照链接“使用委派与其他控制器通信”(“委派?”非常奇怪……)
这就是发生的事情。呈现的视图有一个“委托”,这是它应该告诉“有趣”事物的对象。在本例中,“有趣的”是“嘿,我添加了一个配方!”为了实现这一点,委托实现了一个协议,这意味着它承诺实现一些方法。在这种情况下,所需的方法是recipeAddViewController:didAddRecipe:
AddViewController
有一个delegate
属性,如下所示:
@property(nonatomic, assign) id <RecipeAddDelegate> delegate;
@属性(非原子,赋值)id委托;
这只意味着委托必须符合指定的协议。委托本身在其接口中指示它这样做:
@interface RecipeListTableViewController : UITableViewController <RecipeAddDelegate, NSFetchedResultsControllerDelegate> {
@接口RecipeListTableViewController:UITableViewController{
请注意,这标记为assign
,原因是@Yuras解释道。但是如果您正在编写针对iOS 5的新代码,您应该使用weak
而不是assign
,weak
属性,如果它们的引用对象被解除分配,它们会自动设置为nil
。这样更安全。没有挂点你确定你的AddEventViewController
确实有delegate
属性吗?请发布它的声明。阅读iOS SDK中与UITableViewController
、UITableViewDataSource
和UITableViewDelegate
相关的头文件,了解如何设计c女士和代表们。感谢你们的解释。现在我必须回去真正理解代表们是什么。在过去的一个月里,我肯定“错过”了那个课程。你们刚刚从尤拉斯那里偷走了正确的答案……感谢你们的解释。