Iphone应用,面向对象的设计思想

时间:2011-07-06 14:24:40

标签: iphone objective-c cocoa-touch design-patterns ios4

我是一名java开发人员,正在学习一个IPhone项目的Objective C,我的问题是关于Cocoa中的OOP设计。我有一个基于视图的应用程序,它与Web服务进行通信并重新获取xml,解析它并将其竞争映射到适当的视图组件(例如,如果日期显示带有datepicker的问题,如果问题有2值显示它与分段控件,如果更多与pickerview..etc)所以它是一个动态问题与许多页面。

考虑到cocoa框架,这里可能的最佳设计是什么,例如,如果我创建一个名为“Connection”的类来进行Web请求,我可以从我的ViewController类创建一个连接对象并使用它吗?或者我应该使用delegete类。因为我的类将包括如下方法:

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
 [webData setLength: 0];
}

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
 [webData appendData:data];
}

上面这种实现的方法是否必须放在viewcontroller类中?

第二个问题,我如何设计将xml响应映射到相关的UI视图组件?我希望尽可能使代码成为面向对象,如果在我的视图控制器类中没有太多,但是它应该只接收一个让我们说“uiview对象”填充必要的视图组件,它只会显示它。但映射和推理应该在其他地方完成。我可以在哪里做,然后我可以在哪里放置类似的方法;

-(NSInteger)pickerView:(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component
{
return [itemArray count];
} 

这必须在控制器类中吗?如果不是,我该如何访问这些方法。

希望我能清楚自己。

2 个答案:

答案 0 :(得分:1)

对于第1部分,听起来您想要创建一个工厂/引擎类来处理与服务的通信和解析数据。在该类头声明中,您将需要创建一个协议(java术语中的接口),viewcontrollers将为委托方法实现该协议。这个类还有一个id类型的成员,它将包含一个回调委托对象。

要回答第2部分,您可以让您的工厂/引擎类在解析期间实际创建对象,并在所述委托调用中将它们返回到viewcontroller。

答案 1 :(得分:1)

您的解释很明确,是的。视图控制器在模型对象和视图之间建立接口。它负责在模型值更改时更新视图,并且还响应用户事件以更新模型。

委托方法可以在视图控制器中,只要它是NSURLConnection对象的委托,但它可能是您想要设置为委托的任何对象,当然您必须确保此对象响应所需的委托方法。

在我看来,没有更好的设计,我通常将视图控制器对象设置为NSURLConnection的委托。

关于第二个问题,我没有任何关于设计的建议。想象这样一个系统有点难,我不知道哪种解决方案更好用。 您可以使用包含字符串的索引数组。索引将表示可能的答案数,而字符串是要使用的对象的类名。

祝你好运。