objective-c - Obj-C 子类似乎无法识别继承的选择器

标签 objective-c inheritance subclass

首先,我的代码:

@interface Block : NSObject {
    NSData *data;
    NSInteger slice_count;
}

@property (readonly) NSData *data;

+ (Stopwatch *) runOldTestsUsingConfiguration:(TestConfiguration *)c;

- (Slice *) getSlice:(NSUInteger)idx;

@end

- (Slice *) getSlice:(NSUInteger)idx {
    void *b = (void*)[data bytes] + idx*slice_count;
    int len = [data length] / slice_count;
    Slice *ret = [Slice alloc];
    [ret initWithBytesNoCopy:b length:len freeWhenDone:NO];
    return ret;
    //NSString *temp2 = [data description];
    //NSRange r = NSMakeRange(idx*slice_count, [data length] / slice_count);
    //NSData *d = [data subdataWithRange:r];
    //NSString *temp = [d description];
    //Slice *s = [[Slice alloc] initWithBytesNoCopy:(void *)[d bytes] length:r.length freeWhenDone:NO];
    //return s;
}

其中 SliceNSData 的简单子(monad)类。

出于某种原因,我收到一个运行时错误,似乎表明我的 Slice 实例 a) 实际上不是一个具体实例 (?) 或 b) 它的继承出现了问题并且消息是' t 正确地将自己绑定(bind)到 Slice(几乎可以肯定是我的未知错误)。

我得到的确切错误是:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '***
initialization method -initWithBytes:length:copy:freeWhenDone:bytesAreVM:
cannot be sent to an abstract object of class Slice: Create a concrete instance!'

谁能帮帮我?我已经尝试了几乎所有我能想到的方法(消息调用本身中详细介绍了其中的基本例程),但我仍然没有完成。当它说“创建一个具体实例”时,它是什么意思?这不是我在 alloc 时所做的吗?

最佳答案

子类化 NSData 比你想象的要复杂得多。在大多数情况下,您最好只围绕 NSData 编写一个包装器而不是一个完整的子类。

关于objective-c - Obj-C 子类似乎无法识别继承的选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11055130/

相关文章:

c++ - "unspecialized class template can' t be used as a template argument”是什么意思?

ios - 是否存在与 Swift 的 fatalError 等效的 Objective-C?

javascript - Backbone.js 中混合集合的最佳设计模式

python - 跳过 ndarray 子类中的 numpy __new__ (或者可能覆盖/定义 C 或 cython 中的类)

iphone - 在 objective-c 中使用 BOOL 变量时发出警告

ios - SpriteKit - iOS 7 - iAd 集成错误

ios - iOS/Objective-C:将自定义对象的NSArray转换为JSON

ios - privateQueue managedObjectContext 的奇怪问题

c++ - 使用模板调用类的函数

java - 远离 child : Removing protected fields from inheritance