Преобразование строки в данные возвращает NSInvalidArgumentException и завершает работу приложения ios - PullRequest
0 голосов
/ 16 января 2020

Я использую соединительный заголовок и использую код Objective- C в моем файле swift. В приведенном ниже методе «generateMessageHa sh» я возвратил строку, а затем преобразовал ее в данные, используя строку! .Data (using: String.Encoding.utf32). Это потому, что я должен передать данные в метод "hexRepresentationWithSpaces_AS" в аргумент "nsdata". Даже при том, что это показывает, что я преобразовал правильно, мое ios приложение всегда падает с NSInvalidArgumentException. 'CrytorHelper' и 'FBEncryptorAES' - это мои 2 объективных c класса, из которых я взял методы. Любая идея, почему это происходит?

См. Приведенный ниже код

// преобразование строки в данные в классе Swift

let string = CrytorHelper.generateMessageHash(asBuffer: stringMsg)
let data = string!.data(using: String.Encoding.utf32)

// используйте преобразованные значения данных в приведенном ниже метод в классе swift

let hashValueString = FBEncryptorAES.hexRepresentationWithSpaces_(as: false, nsdata: data)

// 'generateMessageHa sh' реализация метода в цели C

+(NSData *) generateMessageHashAsBuffer :(NSString *) content
{
    return [self sha512AsBuffer:content];
}

// интерфейсный класс

 +(NSString*)generateMessageHashAsBuffer:(NSString *)content;

// Реализация метода hexRepresentationWithSpaces_ в объекте C

+(NSString*)hexRepresentationWithSpaces_AS:(BOOL)spaces nsdata:(NSData *)contentData
{

    const unsigned char* bytes = (const unsigned char*)[contentData bytes];
    NSUInteger nbBytes = [contentData length];
    //If spaces is true, insert a space every this many input bytes (twice this many output characters).
    static const NSUInteger spaceEveryThisManyBytes = 4UL;
    //If spaces is true, insert a line-break instead of a space every this many spaces.
    static const NSUInteger lineBreakEveryThisManySpaces = 4UL;
    const NSUInteger lineBreakEveryThisManyBytes = spaceEveryThisManyBytes * lineBreakEveryThisManySpaces;
    NSUInteger strLen = 2*nbBytes + (spaces ? nbBytes/spaceEveryThisManyBytes : 0);

    NSMutableString* hex = [[NSMutableString alloc] initWithCapacity:strLen];
    for(NSUInteger i=0; i<nbBytes; ) {
        [hex appendFormat:@"%02X", bytes[i]];
        //We need to increment here so that the every-n-bytes computations are right.
        ++i;

        if (spaces) {
            if (i % lineBreakEveryThisManyBytes == 0) [hex appendString:@"\n"];
            else if (i % spaceEveryThisManyBytes == 0) [hex appendString:@" "];
        }
    }

    return hex;
}

// интерфейсный класс

+(NSString*)hexRepresentationWithSpaces_AS:(BOOL)spaces nsdata:(NSData *)contentData;
...