Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 财产';代表';在对象';增加了视频控制器';_Objective C_Ios_Xcode_Eventkit - Fatal编程技术网

Objective c 财产';代表';在对象';增加了视频控制器';

Objective c 财产';代表';在对象';增加了视频控制器';,objective-c,ios,xcode,eventkit,Objective C,Ios,Xcode,Eventkit,在开发人员库的帮助下,我正在尝试使用EventKit和EventKitUI框架。我很早就遇到了障碍。我已经复制并粘贴了。我已经在我的ViewController中的导航栏中添加了一个名为“AddEventViewController”的视图控制器按钮,我正在使用此代码来调用它 - (IBAction)add:(id)sender { AddEventViewController *addController = [[AddEventViewController alloc]

在开发人员库的帮助下,我正在尝试使用EventKit和EventKitUI框架。我很早就遇到了障碍。我已经复制并粘贴了。我已经在我的ViewController中的导航栏中添加了一个名为“AddEventViewController”的视图控制器按钮,我正在使用此代码来调用它

- (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
reserves
B
B
reserves
A

我知道苹果的例子可能会让你感到困惑。首先,下载完整的源代码(或者至少在尝试理解此代码时参考它)

要真正理解这里发生的事情,您需要阅读“解除显示的视图控制器”一节,然后按照链接“使用委派与其他控制器通信”(“委派?”非常奇怪……)

这就是发生的事情。呈现的视图有一个“委托”,这是它应该告诉“有趣”事物的对象。在本例中,“有趣的”是“嘿,我添加了一个配方!”为了实现这一点,委托实现了一个协议,这意味着它承诺实现一些方法。在这种情况下,所需的方法是
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女士和代表们。感谢你们的解释。现在我必须回去真正理解代表们是什么。在过去的一个月里,我肯定“错过”了那个课程。你们刚刚从尤拉斯那里偷走了正确的答案……感谢你们的解释。