Objective-C:改变自身属性的递归方法
Posted
技术标签:
【中文标题】Objective-C:改变自身属性的递归方法【英文标题】:Objective-C: Recursive method that changes property of self 【发布时间】:2013-06-05 21:47:49 【问题描述】:我有一个递归方法可以改变 self 的属性(定义方法的对象)。
我收到错误:
...未捕获的异常 'NSGenericException',原因:'*** Collection <__nsarraym:> 在枚举时发生了变异...'
我阅读了有关此错误的信息,但我不确定如何对我的问题应用解决方案。递归对于解决方案至关重要,更新此特定属性也是如此。我对 Objective-C 很陌生,所以我可能遗漏了一些东西或者设计这个解决方案很糟糕。
currentPlayer
是财产
recursiveMethod
显然是产生错误的递归方法
从for in
循环中调用此递归方法。
- (void) recursiveMethod:(id <Team>)team atIndex:(int *)i withPlayer:(id <Player>)
[self.currentPlayer replaceObjectAtIndex:i withObject:nextPlayer];
if // some conditional that's unimportant to this question
// grab another team
// grab another index
// grab another player
[self recursiveMethod:nextTeam atIndex:i withPlayer:nextPlayer];
很多细节并不重要。我把它剥掉了;实际上它只是一个递归方法,它将更新定义该方法的对象的属性(在本例中为数组)。
【问题讨论】:
哇。看看我在谷歌上搜索到的确切的错误消息:***.com/questions/10157381/… GuillaumeA 指出的答案说您可以通过自己迭代来避免错误。但是,在代码示例中,您展示的正是您正在做的事情 - 对数组的递归修改。所以你必须有一个枚举(例如for in
),你在其中调用recursiveMethod
。
【参考方案1】:
只需阅读异常消息:
NSArrayM [...] 在枚举时发生了变异。
你不能这样做。
【讨论】:
谢谢,很有帮助。真的很感激。 @codework 如果你真的需要修改数组,那么mutableCopy
它并在枚举完成后设置它,这样它就不会崩溃(它会有意义:)跨度>
是的,CRD,你是对的。我的错误是未能将其包含在我的原始代码示例中。这是一个在for in
循环中调用的递归函数。以上是关于Objective-C:改变自身属性的递归方法的主要内容,如果未能解决你的问题,请参考以下文章