Я объявил строку в заголовочном файле примерно так:
@property (nonatomic, retain) NSString *resultOfHash;
Я вызываю мой метод getHash так:
NSString *hash = [self getHash];
Мой метод getHash:
-(NSString *) getHash
{
//Get username form Keychain
KeychainItemWrapper *keyChain = [[KeychainItemWrapper alloc] initWithIdentifier:KeyChainName accessGroup:nil];
username = [keyChain objectForKey:(__bridge id)kSecAttrAccount];
//get token from NSUserDefauls
NSString *token = [[NSUserDefaults standardUserDefaults]objectForKey:@"Token"];
NSString *toHash = [[username stringByAppendingString:HashExtra] stringByAppendingString:token];
const char *s = [toHash cStringUsingEncoding:NSASCIIStringEncoding];
NSData *keyData = [NSData dataWithBytes:s length:strlen(s)];
uint8_t digest[CC_SHA1_DIGEST_LENGTH] = {0};
CC_SHA512(keyData.bytes, keyData.length, digest);
NSData *out = [NSData dataWithBytes:digest length:CC_SHA1_DIGEST_LENGTH];
//convert to string
resultOfHash = [out description];
//App crashed out above
// get rid of unwanted characters
resultOfHash = [resultOfHash stringByReplacingOccurrencesOfString:@" " withString:@""];
resultOfHash = [resultOfHash stringByReplacingOccurrencesOfString:@"<" withString:@""];
resultOfHash = [resultOfHash stringByReplacingOccurrencesOfString:@">" withString:@""];
//log to make sure it works
NSLog(@"hash is: %@", resultOfHash);
return resultOfHash;
}
Мой код вылетает в строке: ResultOfHash = [out description]; но я не уверен почему.
Когда я использую локальную переменную, преобразование работает нормально, но тогда я не могу вернуть локальную переменную из метода getHash. Пример:
Заменить ResultOfHash = [вне описания];
с
NSString *local = [out description];
return local;
и преобразование работает нормально, и когда я отлаживаю построчно, отладчик переходит к закрывающей скобке моего метода, а затем выдает ошибку EXC_BAD_ACCESS.
Я пытался запустить NSZombie, но ничего не нашел.
Любая помощь в попытках разобраться в этом будет принята с благодарностью.