Почему вы не просто храните NSData
? Это путь, проще хранить двоичные данные внутри NSData
, чем внутри CFBitvectorRef
.
Если вы пытаетесь хранить окрошка/пальцев чего-то, я полагаю, вы создаете SHA-256 хэш с CC_SHA256_Init
, _Update
и _Final
. Те дадут вам так называемый дайджест, который является отпечатком данных, которые вы передаете в CC_SHA256_Update
.
// Create the context:
CC_SHA256_CTX shaContext;
CC_SHA256_Init(&shaContext);
// For each value:
CC_SHA256_Update(&shaContext, &v, sizeof(v));
// Get the fingerprint/digest:
unsigned char digest[CC_SHA256_DIGEST_LENGTH];
CC_SHA256_Final(digest, &shaContext);
NSData *fingerprint = [NSData dataWithBytes:digest length:sizeof(digest)];
Тогда вы можете хранить что отпечатков пальцев в Core Data приписывать это двоичных данных.
В зависимости от типа v
, возможно, вам придется сменить вызов на CC_SHA256_Update()
. Если вы делаете это в NSObject, вам нужно вызвать его для каждой интересующей вас переменной экземпляра (которая должна быть частью отпечатка пальца), например. если у вас есть
@property (nonatomic) int32_t count;
@property (nonatomic, copy) NSString *name;
вы могли бы сделать
int32_t v = self.count
CC_SHA256_Update(&shaContext, &v, sizeof(v));
NSData *d = [self.name dataUsingEncoding:NSUTF8Stringencoding];
CC_SHA256_Update(&shaContext, [data bytes], [data length]);
возможный дубликат [Как хранить CFBitVector (или любой CFType) в основных данных с использованием CFData/NSData?] (http://stackoverflow.com/questions/11384790/how-to-store-cfbitvector-or-any-cftype-in-core-data-using-cfdata-nsdata) – Stuart