首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在自定义类上实现NSFastEnumeration

在自定义类上实现NSFastEnumeration
EN

Stack Overflow用户
提问于 2011-01-28 19:44:30
回答 2查看 2.4K关注 0票数 6

我有一个继承自NSObject的类。它使用NSMutableArray来保存子对象,例如,人们使用NSMutableArray *items来保存Person对象。如何在items上实现NSFastEnumerator?

我尝试过以下几种方法,但都无效:

代码语言:javascript
复制
@interface People : NSObject <NSFastEnumeration>
{
    NSMutableArray *items;
}

@实现...

代码语言:javascript
复制
- (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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-29 01:26:51

您没有正确使用NSFastEnumerationState结构。请参阅NSFastEnumeration Protocol Reference并查看常量部分,以查看每个字段的描述。在您的例子中,您应该将state->mutationsPtr保留为nil。state->itemsPtr应该设置为对象的C数组,而不是NSArray或NSMutableArray。您还需要将相同的对象放入作为stackbuf传递的数组中。

但是,由于您使用NSMutableArray来包含要枚举的对象,因此可以将调用转发到该对象:

代码语言:javascript
复制
- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id *)stackbuf count:(NSUInteger)len {
    return [items countByEnumeratingWithState:state objects:stackbuf count:len];
}
票数 20
EN

Stack Overflow用户

发布于 2011-01-28 22:32:15

有一个NSFastEnumeration协议,但您使用的是(不存在的) NSFastEnumerator协议。这会是问题所在吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4827826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档