Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.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
Iphone objective-c代表和活动设计(我不理解)_Iphone_Objective C_Model View Controller_Design Patterns_Ipad - Fatal编程技术网

Iphone objective-c代表和活动设计(我不理解)

Iphone objective-c代表和活动设计(我不理解),iphone,objective-c,model-view-controller,design-patterns,ipad,Iphone,Objective C,Model View Controller,Design Patterns,Ipad,我对objective-c语言相当陌生(不到三个月),但这是我真正需要理解的东西 假设有一个控制器(在iOS环境中)管理来自用户的输入数据的表视图。表格必须具有可编辑的单元格和一些功能,以便更容易地选择值,例如,显示带有字段可能值的弹出框的按钮 假设有一个存储国家名称的字段。popover首先显示了大陆的列表;当用户选择一个大陆时,popover的控制器必须显示预览所选大陆的国家 现在,这个popover出现在应用程序中的许多地方,所以如果我可以封装它以供以后使用,那就太好了。我对这款府绸的期望

我对objective-c语言相当陌生(不到三个月),但这是我真正需要理解的东西

假设有一个控制器(在iOS环境中)管理来自用户的输入数据的表视图。表格必须具有可编辑的单元格和一些功能,以便更容易地选择值,例如,显示带有字段可能值的弹出框的按钮

假设有一个存储国家名称的字段。popover首先显示了大陆的列表;当用户选择一个大陆时,popover的控制器必须显示预览所选大陆的国家

现在,这个popover出现在应用程序中的许多地方,所以如果我可以封装它以供以后使用,那就太好了。我对这款府绸的期望如下:

...
@protocol MyPopoverDelegate<NSObject> {
-(void)didSelectCountry:(NSString *)countryName;
{
...
MyPopoverController *dataSelector = [[MyPopoverController] alloc] init];
dataSelector.dataType = CountryDataType;
dataSelector.delegate = self;
[dataSelector show];
[dataSelector release];
...
我从未在objective-c中看到过这种行为,我觉得这不是我的想法。
为什么不对?

对于委托方法,您可以采用以下方法:

MyPopOverDelegate
    - (void)didFinishSelectingCountry:(NSString *)countryName popOver:(MyPopOver *)popOver;
    Caller.m

// the caller
- (void)viewDidLoad {
MyPopoverController *dataSelector = [[MyPopoverController] alloc] init];
dataSelector.dataType = CountryDataType;
dataSelector.delegate = self;
[dataSelector show];

}

- (void)didFinishSelectingCountry:(NSString *)countryName popOver:(MyPopOver *)popOver {
   // finish stuff
   [popOver release];
}

这种方法的使用非常类似于NSUrlConnection、UIImagePickerController

委托方法的一种方法是:

MyPopOverDelegate
    - (void)didFinishSelectingCountry:(NSString *)countryName popOver:(MyPopOver *)popOver;
    Caller.m

// the caller
- (void)viewDidLoad {
MyPopoverController *dataSelector = [[MyPopoverController] alloc] init];
dataSelector.dataType = CountryDataType;
dataSelector.delegate = self;
[dataSelector show];

}

- (void)didFinishSelectingCountry:(NSString *)countryName popOver:(MyPopOver *)popOver {
   // finish stuff
   [popOver release];
}

这种方法的使用非常类似于NSUrlConnection、UIImagePickerController,如果您希望在整个应用程序中从视图层次结构中的任何位置重用某个唯一的对象,可以将其作为应用程序代理的属性,并让应用程序代理拥有它(在活动时保留它,在内存警告时释放它,等等)


如果您将代码移植到垃圾收集环境中,自保留对象最终可能会遇到问题。

如果您希望在视图层次结构中的任何位置跨整个应用程序重用某个唯一的对象,可以将其作为应用程序委派的属性,并让应用程序委派拥有它(在激活时保留,在内存警告时释放等)

如果将代码移植到垃圾收集环境中,自保留对象最终可能会遇到问题。

可能的答案:可能答案中的“关于自定义视图控制器”部分:可能答案中的“关于自定义视图控制器”部分