2010-11-17 32 views
1

我有一个模型,本质上存储联系人信息:电话,推特,地址等 我需要在UITableView中显示数据,所以我基本上需要3条信息:标签(“电话“),实际的数据(”(123)456-789“)和一个URL来处理与正确的应用程序(”电话://无论“)的数据。优雅的数据模型为UITableViewDataSource

我正在考虑使用3个数组,每条信息一个,并检查每个属性,看它是否给出(可以是可选的),如果是的话,为这个属性添加3个数组的东西。

然后,在表视图的数据源中,每行可以引用3个数组中的索引来填充单元格。

的顺序很重要,所以我可以显示电话之前地址等

谁能拿出一个更优雅的方式来设计的模型,这样我可能不需要3个阵列或大量的:

if(self.phone != nil) 
{ 
    [labels addObject:@"foo"]; 
    [descs addObject:self.phone]; 
    [urls addObject:@"baz"]; 
} 

根据外部条件,只有一个“联系人”可以具有不同数量的属性。所以每个属性都是可选的。表视图将以特定顺序显示该联系人的属性。

谢谢!

回答

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。模型对象应该能够自己导出这些信息。这将确保您的应用程序逻辑不会分散到几十个不同的地方,而是保存在易于维护的定义良好的逻辑数据包中。

+0

我已经有一个模型,所以这部分是给定的。我也得到自定义getter格式,因为我想要的。问题是我还需要将标签与该属性关联。 最后,我想轻松地将这些数据作为数据源传递给表视图,所以数组会很好,因为我可以将它们传递给indexPath.row。这最后一点是问题的重点,所以我可以避免if(indexPath.row == 1){bla} else if(indexPath.row == 2){foo}。 虽然谢谢! – Christoph 2010-11-20 22:35:06

相关问题