我有一个基本上存储联系信息的模型:电话,推特,地址等。 我需要在UITableView中显示数据,所以我基本上需要3条信息:标签(“电话”),实际数据(“(123)456-789”)和用右边处理数据的URL申请(“tel:// whatever”)。
我正在考虑使用3个数组,每个信息对应一个,并查看每个属性,看看是否给出(可以是可选的),如果是,则将内容添加到该属性的3个数组中。
然后,在表视图的数据源中,每行可以引用3个数组中的索引来填充单元格。
订单很重要,所以我可以在电话等之前显示地址
任何人都可以想出一种更优雅的方式来设计模型,这样我就不需要3个阵列,或者很多:
if(self.phone != nil)
{
[labels addObject:@"foo"];
[descs addObject:self.phone];
[urls addObject:@"baz"];
}
根据某些外部条件,只有一个“联系人”可以拥有不同数量的属性。所以每个属性都是可选的。表格视图将按特定顺序显示该联系人的属性。
谢谢!
答案 0 :(得分:0)
我相信你应该创建一个模型类,每个属性都有属性。否则,有一天会回来咬你的屁股。
将值存储在数组中意味着您已将表示意义存储到模型中。打破MVC模式。
这也意味着您可以在模型对象中拥有一些实际逻辑,这将减少潜在的缺陷。举个例子:
// Contact.h
@interface Contact : NSObject {
}
@property(nonatomic, copy) NSString* phoneNumber;
@property(nonatomic, readonly) NSURL phoneNumberURL;
@end
// Contact.m
@implementation Contact
@synthesize phoneNumber;
-(NSURL*)phoneNumberURL {
return [NSURL URLWithString:
[@"tel:" stringByAppendingString:self.phoneNumber]];
}
@end
这样您就不必从模型对象外部更新URL。模型对象应该能够自己获取此信息。这将确保您的应用程序逻辑不会分散到许多不同的位置,而是保存在易于维护的明确的逻辑口袋中。