Tout d'abord, mon code :
@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;
}
donde Slice
est une sous-classe simple de NSData
.
Pour une raison quelconque, je reçois une erreur d'exécution qui semble indiquer que mon instance Slice a) n'est pas réellement une instance concrète ( ?) ou b) quelque chose ne va pas dans son héritage et le message ne se lie pas correctement à Slice (presque certainement par mon erreur encore inconnue).
L'erreur exacte que je reçois est la suivante :
*** 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!'
Quelqu'un peut-il m'aider ? J'ai essayé à peu près tout ce à quoi je peux penser (les routines de base sont détaillées dans l'appel du message lui-même) et je n'ai toujours rien trouvé. Que signifie l'expression "créer une instance concrète" ? N'est-ce pas ce que je fais lorsque je alloc
ça ?