нераспознанный селектор с категорией NSMutableData - PullRequest
2 голосов
/ 11 марта 2011

Я добавляю категорию в NSData следующим образом:

// PacketCategories.h
@interface NSData(PacketSplit)
  - (NSArray *)splitTransferredPackets:(NSData **)leftover;
@end

// PacketCategories.m
@implementation NSData(PacketSplit)
- (NSArray *)splitTransferredPackets:(NSData **)leftover {

    NSMutableArray *ret = [NSMutableArray array];
    const unsigned char *beginning = [self bytes];
    const unsigned char *offset = [self bytes];
    NSInteger bytesEnd = (NSInteger)offset + [self length];

    while ((NSInteger)offset < bytesEnd) {
        uint64_t dataSize[1];
        NSInteger dataSizeStart = offset - beginning;
        NSInteger dataStart = dataSizeStart + sizeof(uint64_t);

        NSRange headerRange = NSMakeRange(dataSizeStart, sizeof(uint64_t));
        [self getBytes:dataSize range:headerRange];


        if (dataStart + dataSize[0] + (NSInteger)offset > bytesEnd) {
            NSInteger lengthOfRemainingData = [self length] - dataSizeStart;
            NSRange dataRange = NSMakeRange(dataSizeStart, lengthOfRemainingData);
            *leftover = [self subdataWithRange:dataRange]; 

            return ret;
        }

        NSRange dataRange = NSMakeRange(dataStart, dataSize[0]);
        NSData *parsedData = [self subdataWithRange:dataRange];

        [ret addObject:parsedData];
        offset = offset + dataSize[0] + sizeof(uint64_t);
    }
    return ret;
}
@end

А потом пытаюсь назвать эту категорию:

#import "PacketCategories.h"

NSMutableData *data = [NSMutableData data];
// Read some data
[data appendBytes:buffer length:bytesRead];
NSArray *dataPackets = [data splitTransferredPackets:&readLeftover];

Который получает следующую ошибку:

-[NSConcreteMutableData splitTransferredPackets:]: unrecognized selector sent to instance 0x6e6f7b0 [ERROR] The application has crashed with an unhandled exception. Stack trace:

Есть идеи? Разве NSConcreteMutableData не наследуется от NSData?

Другие предлагаемые ответы ( Категория Objective-C, вызывающая нераспознанный селектор ) предположили, что файл не связан с ним, что невозможно, поскольку другие категории, определенные в этом файле, используются просто отлично.

Спасибо

Ответы [ 2 ]

6 голосов
/ 09 декабря 2011

Ookay. У меня была та же проблема, но с другим исходом. Вкратце проблема была в моем файле проекта. Файлы категорий отображались в навигаторе проекта - я могу загружать / редактировать и т. Д. Но компоновщик не знал, как с ними связаться. То, как я нашел это, тянуло на другой поток - создание фиктивного конкретного класса в моих файлах категорий, чтобы заставить компоновщик включать их. Неудачно. Затем я попытался создать экземпляр класса-пустышки в своем приложении. Эврика - теперь я получаю ошибку компоновщика! Итак, я просто удалил и повторно добавил файлы категорий в проект, и теперь все хорошо. Не уверен, как файл проекта вышел из строя (svn merge?), Но это так.

5 голосов
/ 03 июля 2013

Удалите файлы категорий и добавьте их снова, проверяя цель.Решено для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...