【发布时间】:2010-10-02 15:38:14
【问题描述】:
我对 Objective-c 语言还很陌生(不到三个月),但我确实需要了解它。
假设有一个控制器(在 iOS 环境中)管理来自用户的输入数据的表视图。表格必须具有可编辑的单元格和一些功能,以便更轻松地选择值,例如显示带有字段可能值的弹出框的按钮。
假设有一个字段来存储国家名称。弹出框首先显示大陆列表;当用户选择一个大陆时,弹出框的控制器必须显示预览所选大陆的国家/地区。
现在,这个弹出框出现在应用程序的许多地方,所以如果我可以封装它以供以后使用会很好。我对这个弹出框的期望是这样的:
...
@protocol MyPopoverDelegate<NSObject> {
-(void)didSelectCountry:(NSString *)countryName;
{
...
MyPopoverController *dataSelector = [[MyPopoverController] alloc] init];
dataSelector.dataType = CountryDataType;
dataSelector.delegate = self;
[dataSelector show];
[dataSelector release];
...
这里的问题是[dataSelector release] 行,因为管理弹出框的代码必须保持活动状态,直到选择国家。这意味着dataSelector 变量必须是调用者类的属性,这很糟糕。
那么问题是: 我如何组织这样的情况以拥有可重用的控制器?
谢谢
在vodkhang回答后编辑:
好的,这很好,但dataSelector 仍然是一个属性。
如果我这样做:
@implementation MyPopoverController
- (id)init {
...
[self retain];
...
}
- (void)popoverControllerDidDismissPopover: (UIPopoverController *)popoverController {
...
[delegate didFinishSelectingCountry:countryName];
[self release];
}
@end
我从未在 Objective-c 中看到过这种行为,我觉得这不是想法。 为什么错了?
【问题讨论】:
-
可能的答案:developer.apple.com/library/ios/#featuredarticles/…中的“关于自定义视图控制器”部分
标签: iphone objective-c model-view-controller design-patterns ipad