Как удалить байты с конца объекта NSMutableData

У меня есть объект NSMutableData, который вызывает у меня проблемы, я пытаюсь удалить последние 6 байтов из объекта, подобного этому

NSMutableData *reducedDataPacket = [[NSMutableData alloc] init];
        reducedDataPacket = [myCompressedData copy];

NSRange range = NSMakeRange([reducedDataPacket length]-6, 6);
        [reducedDataPacket replaceBytesInRange:range withBytes:NULL length:0];

Однако после выполнения последней строки мое приложение вылетает, и я остаюсь с этой ошибкой ниже.

-[NSConcreteData replaceBytesInRange:withBytes:length:]: unrecognized selector sent to instance 0x1f037870
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSConcreteData replaceBytesInRange:withBytes:length:]: unrecognized selector sent to instance 0x1f037870

Я никогда не пробовал делать это раньше и ухожу от других ответов, которые я исследовал, но я просто не могу заставить это работать ... любая помощь будет принята с благодарностью.


person HurkNburkS    schedule 15.07.2013    source источник


Ответы (2)


Ваша первая строка бесполезна, потому что вы затем переопределяете ReddataPacket во второй строке, так что первую строку следует удалить. Я предполагаю, что myCompressedData - это NSData, а не NSMutableData, поэтому измените вторую строку на:

NSMutableData *reducedDataPacket = [myCompressedData mutableCopy];
person rdelmar    schedule 15.07.2013
comment
гааааа! почти получил это .. lol спасибо за ваш быстрый ответ, отметим его как правильный, как только лимит времени истечет примерно через 9 минут: P - person HurkNburkS; 16.07.2013

Сначала вам нужен изменяемый экземпляр, непонятно, зачем вы его создаете, а затем копируете. Вам просто нужно сделать:

NSMutableData *reducedDataPacket = [myCompressedData mutableCopy];

Затем вы хотите уменьшить длину, а не пытаться заполнить часть данных ничем:

[reducedDataPacket setLength:(reducedDataPacket.length - 6)];
person Wain    schedule 15.07.2013