我有一个数据结构,我想列举。我想实现我对象的NSFastEnumerator如下:实现NSFastEnumerator:EXC_BAD_ACCESS当迭代for ...在
- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state
objects:(__unsafe_unretained id [])buffer
count:(NSUInteger)len {
NSUInteger c = 0;
while (c < len) {
id obj = [self objectAtIndex:state->state];
if (obj == nil) break;
buffer[c] = obj;
c++;
state->state++;
}
state->itemsPtr = buffer;
state->mutationsPtr = nil;
return c;
}
如果我直接用objectAtIndex,我的对象正常工作。索引不存在时,我得到一个零。但是,当我再使用for循环:
for (Pin *pin in coll) { ... }
的代码,通过上述功能罚款运行,并与这似乎是有效的状态值填充并返回对象的数量,然后我在得到一个EXC_BAD_ACCESS失败为声明本身。
我在这个实现中做错了什么?
我的objectAtIndex:方法由下面的NSMutableArray支持,所有的内存管理都由数组处理。方法签名是由XCode本身生成的,所以我假设它是正确的,但我不确定。 – Monopol
是的,我认为这是正确的,我在我的头文件中看到它。如果你正在使用NSMutableArray,我无法想象为什么这会是一个问题。我会建议在http://devforums.apple.com上提问。 – jtbandes