不,你不想这样做。你不希望你的视图控制器直接访问数据模型的数组。这将在技术层面上起作用,但是它会很脆弱,并且可能会随着项目规模的扩大而失败。随着项目日益复杂化,您将希望越来越多地将数据模型对象(本例中为xmlParser)包装在方法的保护层中,以控制和验证数据模型如何更改。最终,您将拥有包含多个视图的项目,多个视图控制器以及来自用户和URL的信息。您需要养成使用数据模型对象的习惯,而不仅仅是一个愚蠢的商店,而是作为一个活跃的管理者和数据验证者。
在像这样的情况我也有我的数据模型的排列完全使其成为@protected或@private财产包裹。然后我会有专门的方法来获取或插入数据到数据模型类本身的实际数组中。数据模型之外的任何对象都不应该直接访问数组或者不知道其索引。
因此,在这种情况下,您的数据模型将有类似:
- (NSString *) textForLineAtIndexPath:(NSIndexPath *) anIndexPath{
//... do bounds checking for the index
NSString *returnString=[self.privateArray objectAtIndex:anIndexPath.row];
if (returnString=='sometest'){
return returnString;
}
return @""; //return an empty string so the reciever won't nil out and crash
}
以及用于设置行,如果你需要一个setTextForLineAtPath:
方法。
一般的教学材料没有花足够的(通常是没有)的时间谈论的数据模型,但数据模型实际上是方案的核心。这是应用程序的实际逻辑所在,因此它应该是项目中最复杂和经过全面测试的类之一。
一个好的数据模型应该接口不可知即它应着眼基于接口,基于web界面或甚至在命令行工作。它不应该知道也不在乎它的数据将显示在tableview或其他任何界面元素或类型中。
当我开始一个新项目,我做的第一件事是注释掉“[窗口makeKeyAndVisible]。”在应用程序的代表。然后,我创建我的数据模型类,并通过加载数据并记录输出来测试它的老派。只有当它按我希望的方式工作时,我才能进入用户界面。
因此,真正想想应该在抽象层面上做什么。在自定义类中对该逻辑进行编码。隔离来自任何其他对象的所有直接操作的数据。在提交之前验证数据的所有输入。
这听起来像很多工作,它是。对于一个小项目而言,这感觉就像是矫枉过正,而且在很多情况下是这样。但是,随着应用程序复杂度的增加,尽早获得这种习惯将会很快带来巨大的收益。
+1我完全同意,文档在解释一个考虑良好的模型层的绝对必要性方面很差。大多数示例只是将数据放入NSString或NSArray中,学生们被误导为复制这些内容。学生不会被教导这些例子过度简化了模型层,因为他们专注于其他部分。 – 2010-04-09 15:01:18