1
4
正如上面的Phellicks建议的,您可能不会返回可变集
这个
与你的主要问题无关,我想补充一下(1)这一点:
…是毫无意义的,只是添加了另一个可能的错误源。没有理由不使用
(2)在访问外部对象(甚至是单例对象)时,最好将对外部对象的引用作为类的属性,尤其是在数据模型等关键对象的情况下。这允许您控制和跟踪对外部对象的访问。
(3)不要将单例变量视为裸全局变量。这会导致悲伤。相反,用特定的方法包装对数据模型内部数据的访问。例如,而不是访问
或
这将使您的数据模型能够控制其内部,并使其能够拒绝添加不应属于内部的对象。 编辑从评论:
与所有集合和字符串一样,nsset实际上是一个类集群,即所有共享相同接口的子类的集合。当你创建一个集合时,你得到的实际类可能会有所不同,这取决于它是如何创建的。在这种情况下,您将返回NSore核心基础集,这是NSSET的标准核心类。
因此,你的问题是
此初始化:
…正在由以下人员处置:
如果您有一个实例变量,并且您创建了一个同名的局部变量,那么局部符号将在创建它的范围内占主导地位。这似乎有效,因为作为nsset的子类,nsmutableset响应nsset的所有方法和属性。 但是,在构建时,您必须从链接器中收到大量警告。你不应该忽视那些错误。您应该将它们视为致命错误,因为它们在运行时就是这样。 要解决您的问题: (1)将data.favorites声明为可变数组,然后直接访问它。将另一个局部变量赋给同一个地址不会给您带来任何好处。
(2)将Favorites声明为当前对象的可变数组属性。从初始化
(3)将在data.favorites中添加或删除对象的所有逻辑移动到数据模型对象中的自定义方法(请参见上文) 三是最好的选择。 编辑02 看起来类集群隐藏了集群中所有类的真实类。我运行了以下测试代码:
…得到这个输出:
很明显,来自调试器和类函数的报告对于找出属于集群的任何实例的真实类都是无用的。以前不是这样的。这是最近的变化。我认为这是核心基金“免费桥接”的一部分。 您可以将项添加到Favorites,因为这两个类中的Favorites的所有定义都是不可变的。 在任何情况下,您的问题是在同一个类中有两个独立的收藏夹定义。链接器警告您说:
我认为这个问题可以通过运行时混淆这两个最爱来解释。将对象添加到一个收藏夹,但记录另一个。 本地对收藏的重新定义毫无意义。 移除它并查看问题是否仍然存在。 |
WkWk · Apple Watch动作通知不起作用 2 年前 |
Otavio Miguel · 在手机中保留我自己未发布的ios应用 2 年前 |
Nico Passaglia · 移动键盘向上移动站点 6 年前 |