我是一个为IPhone项目学习目标C的java开发人员,我的问题是关于Cocoa中的OOP设计。我有一个基于视图的应用程序,它与一个web服务进行通信并接收一个xml,解析它并映射它的内容--一个适当的视图组件(例如,如果是日期,则用数据报警器显示问题,如果问题有2个值,则用分段控件显示问题,如果用一个pickerview..etc显示更多),所以它的动态问题有很多页。
考虑到可可框架,这里最好的设计是什么,例如,如果我创建一个名为"Connection“的类来进行web请求,我可以从我的ViewController类创建一个连接对象并使用它吗?或者我应该为that..because使用删除类,我的类将包括如下方法:
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
[webData setLength: 0];
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[webData appendData:data];
}上面这种实现的方法必须放在viewcontroller类中吗?
第二个问题是,如何设计将xml响应映射到相关的UI视图组件?我希望使代码尽可能地面向对象,如果在我的视图控制器类中显示的代码不太多,而是应该只接收一个"uiview对象“,其中填充了必要的视图组件,并且它只会显示它。但是映射和推理应该在某个地方进行,else..where,我可以这样做,然后我可以把方法放在哪里,例如;
-(NSInteger)pickerView:(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component
{
return [itemArray count];
} 这必须在控制器类中吗?如果不是,我如何访问此方法。
希望我能把自己说清楚。
发布于 2011-07-06 15:29:09
对于第1部分,您似乎希望创建一个工厂/引擎类,它将处理与服务的通信和数据的解析。在该类头声明中,您将希望创建一个协议( java术语中的接口),视图控制器将为委托方法实现该协议。该类还将有一个类型为id的成员,该成员将保存用于回调的委托对象。
要回答第2部分,您可以让工厂/引擎类在解析过程中实际创建对象,并在所述委托调用中将它们返回给视图控制器。
发布于 2011-07-06 15:36:08
你的解释很清楚是的。视图控制器在模型对象和视图之间创建接口。当模型值发生变化时,它负责更新视图,并响应用户事件来更新模型。
委托方法可能在您的视图控制器中,只要它是您的NSURLConnection对象的委托,但它可能是您希望设置为委托的任何对象,当然,您必须确保该对象响应所需的委托方法。
在我看来,没有更好的设计,我通常将视图控制器对象设置为NSURLConnection的委托。
关于第二个问题,我对设计没有任何建议。这是一个有点难以想象的制度,我不知道哪一个解决方案会更好地使用。可以使用将包含字符串的索引数组。索引表示可能的答案数,而字符串是对象要使用的类名。
祝好运。
https://stackoverflow.com/questions/6597997
复制相似问题