【发布时间】:2013-04-04 21:02:38
【问题描述】:
注意:
- 我已将
NSData存储在本地数据库中。 - 我想从本地数据库中使用它。但由于它存储在
本地数据库作为文本,在将其转换回时面临问题
NSData。 - strDbData 在这里是
NSString类型的对象。
我有一个NSData 存储在本地数据库中,例如<a3829c97 3b1efacb c7680f7e 7e7a95a2>
现在我想找回它,所以我按照下面提到的做,但我收到错误。
1) 第一种方式
NSData *myData = (NSData*)strDbData;
NSLog(@"%@",[myData class]);
错误:-[__NSCFString AES256DecryptWithKey:]: unrecognized selector sent to instance 0x1ddcd9c0
2) 第二种方式
NSData *myData = [[NSData alloc]initWithData:(NSData*)strDbData];
错误:-[__NSCFString bytes]: unrecognized selector sent to instance 0x1dd61a40
那么我如何将本地数据库中的NSData sotred 作为“文本”转换回NSData?
编辑
strDbData = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 6)];
编辑 2 将 NSData 存储在数据库中
-(BOOL)updateSingleRow:(NSData*)myData
{
@try
{
BOOL success = NO;
sqlite3_stmt *statement;
const char *stmt = [[NSString stringWithFormat:@"UPDATE ABC SET XYZ = '%@' WHERE ID = 1 ",myData] UTF8String];
if (sqlite3_open([databaseFilePath UTF8String], &database) == SQLITE_OK)
{
if(sqlite3_prepare_v2(database, stmt, -1, &statement, NULL) == SQLITE_OK)
{
if(sqlite3_step(statement) != SQLITE_DONE )
{
NSLog( @"updateSingleRow Error: %s", sqlite3_errmsg(database) );
}
else if (sqlite3_total_changes(database)>0)
{
success = YES;
}
else if (sqlite3_total_changes(database)==0)
{
NSLog(@"No Updates : %@" , query);
}
}
sqlite3_finalize(statement);
sqlite3_close(database);
}
return success;
}
@catch (NSException *exception)
{
TRACE_ERROR(@"updateSingleRow", exception.name, exception.description);
}
}
【问题讨论】:
-
strDbData 的类型是什么?是 NSString 吗?
-
如果数据库中有NSData,那么NSString
strDbData从哪里来? -
是的,那个字符串是从哪里来的?
-
@MartinR 我将
存储在数据库中,并在我想使用时取回并存储在 strDbData 中 -
请出示代码:strDbData是如何创建的?
标签: ios objective-c ipad nsstring nsdata