【问题标题】:How to use with KVC accessors for a mutable array Objective-C如何与 KVC 访问器一起使用可变数组 Objective-C
【发布时间】:2013-09-25 14:58:34
【问题描述】:

我正在尝试创建一个符合 KVC 的可变数组来检测数组中的更改。

在我的头文件中:

@interface ObjectDataModel : NSObject{
@private
    NSMutableArray *objectArray;
}

@property (nonatomic, strong) NSArray *objectArray;

- (NSArray *)objectArray;
- (NSUInteger)objectArrayCount;
- (id)objectInFilePathsArrayAtIndex:(NSUInteger)index;
- (id)objectArrayAtIndexes:(NSIndexSet *)indexes;
- (void)insertObject:(id)val inObjectArrayAtIndex:(NSUInteger)index;
- (void)insertObjectArray:(NSArray *)array atIndexes:(NSIndexSet *)indexes;
- (void)removeObjectFromObjectArrayAtIndex:(NSUInteger)index;
- (void)removeObjectArrayAtIndexes:(NSIndexSet *)indexes;
- (void)replaceObjectInObjectArrayAtIndex:(NSUInteger)index withObject:(id)object;
- (void)replaceObjectArrayAtIndexes:(NSIndexSet *)indexes withObjectArray:(NSArray *)array;



@end

文档中显示的 KVC 的典型访问器方法。当我在主文件中实现访问器方法时,以下这些函数无法识别对选择器的调用:

@synthesize filePathsArray = _filePathsArray;

- (id)init
{
    self = [super init];
    if (self) {

    }
    return self;
}

//
- (void)insertObject:(id)val inObjectArrayAtIndex:(NSUInteger)index
{
    [self.objectArray insertObject:val atIndex:index];
}

- (void)insertObjectArray:(NSArray *)array atIndexes:(NSIndexSet *)indexes{
    [self.objectArray insertObjects:array atIndexes:indexes];
}

- (void)removeObjectFromObjectArrayAtIndex:(NSUInteger)index{
    [self.objectArray removeObjectAtIndex:index];
}

- (void)removeObjectArrayAtIndexes:(NSIndexSet *)indexes{
    [self.objectArray removeObjectsAtIndexes:indexes];
}

- (void)replaceObjectInObjectArrayAtIndex:(NSUInteger)index withObject:(id)object{
    [self.objectArray replaceObjectAtIndex:index withObject:object];
}

- (void)replaceObjectArrayAtIndexes:(NSIndexSet *)indexes withObjectArray:(NSArray *)array{
    [self.objectArray replaceObjectsAtIndexes:indexes withObjects:array];
} 

错误是“NSarray 没有可见的@interface”为函数中的每个选择器声明选择器:''。我很困惑,不确定为什么这些选择器不存在? 帮助表示赞赏。头文件中其他4个函数都ok。

【问题讨论】:

    标签: ios objective-c arrays cocoa kvc


    【解决方案1】:

    你有

    @property (nonatomic, strong) NSArray *objectArray;
    

    这是不可变的。使用

    @property (nonatomic, strong) NSMutableArray *objectArray;
    

    改为

    【讨论】:

    • 我仍然遇到“NSArray 没有可见的@interface 声明选择器:”问题,其中 [self.object Array removeObjectsAtIndexes:indexes] 之类的东西甚至无法识别。
    • 伙计,我写的是 NSMutableArray,而不是 NSArray。您仍然会收到 NSArray 类型的错误。考虑所有地方,你的 objectArray 被定义为 NSArray - .h 文件中的 @interface,.m 文件中的类扩展 - 它应该是 NSMutableArray for -removeObjectsAtIndexes:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多