我有一个继承自NSObject的类。它使用NSMutableArray来保存子对象,例如,人们使用NSMutableArray *items来保存Person对象。如何在items上实现NSFastEnumerator?
我尝试过以下几种方法,但都无效:
@interface People : NSObject <NSFastEnumeration>
{
NSMutableArray *items;
}@实现...
- (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;
}发布于 2011-01-29 01:26:51
您没有正确使用NSFastEnumerationState结构。请参阅NSFastEnumeration Protocol Reference并查看常量部分,以查看每个字段的描述。在您的例子中,您应该将state->mutationsPtr保留为nil。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];
}发布于 2011-01-28 22:32:15
有一个NSFastEnumeration协议,但您使用的是(不存在的) NSFastEnumerator协议。这会是问题所在吗?
https://stackoverflow.com/questions/4827826
复制相似问题