我有一个继承自NSObject的类。它使用NSMutableArray来保存子对象,例如人们使用NSMutableArray *项来保存Person对象。如何在项目上实现NSFastEnumerator?
我尝试过以下但是无效:
@interface People : NSObject <NSFastEnumeration>
{
NSMutableArray *items;
}
@implementation ...
- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id *)stackbuf count:(NSUInteger)len
{
if(state->state == 0)
{
state->mutationsPtr = (unsigned long *)self;
state->itemsPtr = items;
state->state = [items count];
return count;
}
else
return 0;
}
答案 0 :(得分:19)
您没有正确使用NSFastEnumerationState结构。请参阅NSFastEnumeration Protocol Reference并查看常量部分以查看每个字段的说明。在您的情况下,您应该将state->mutationsPtr
保留为零。 state->itemsPtr
应设置为对象的C数组,而不是NSArray或NSMutableArray。您还需要将相同的对象放入作为stackbuf传递的数组中。
但是,由于您使用NSMutableArray来包含要枚举的对象,因此您可以将调用转发给该对象:
- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id *)stackbuf count:(NSUInteger)len {
return [items countByEnumeratingWithState:state objects:stackbuf count:len];
}
答案 1 :(得分:1)
有NSFastEnumeration
协议,但您使用的是(不存在的)NSFastEnumerator
协议。这可能是问题吗?