使用sqlite3进行转换

时间:2015-03-23 16:49:53

标签: objective-c sqlite

我不是来自xcode背景,而是来自java和c#。现在我正在尝试将我的应用程序更改为ios并且不确定我是否理解如何正确投射,或者更重要的是,xcodes问题是什么!

我正在尝试做一些非常简单的事情,从sqlite获取值并填充NSMutableDictionary对象。

我想得到像long,int和string这样的值,似乎我必须做各种各样的转换才能让编译器喜欢它。有人可以指出我正确的方向,因为我应该写的肯定这是必要的。

我的字典变量在本例中称为myDictionary。

将字符串添加到NSDictionary

[myDictionary setValue:[[NSString alloc] initWithUTF8String:(char *)sqlite3_column_text(sqlStatement, 4)] forKey:@"myText"];

将int添加到NSDictionary

[myDictionary setValue: [[NSNumber alloc] initWithUnsignedInt:sqlite3_column_int(sqlStatement, 0)] forKey:@"myInt" ];

所有这些铸造真的是必要的吗?我以为我可以做这样简单的事情

将int添加到NSDictionary

[myDictionary setValue: sqlite3_column_int(sqlStatement, 0) forKey:@"myInt" ];

但是这句话

  

' int'隐式转换到了' id'不允许使用ARC

也试过

[myDictionary setValue: (int *)sqlite3_column_int(sqlStatement, 0) forKey:@"myInt" ];

但是我得到了

  

非Objective-C指针类型的隐式转换' int'到了' id'不允许使用ARC

我也尝试过同样的文字。如果我没有正确地做到这一点,有人请告诉我。

即便是这样的事也无效

int *myVar = sqlite3_column_int(sqlStatement, 0);

如果我也改变它

int myVar = sqlite3_column_int(sqlStatement, 0);

哪个确实有效,然后我无法将其填充到NSDictionary中作为此错误

[myDictionary setValue:myVar forKey:@"intValue"];

1 个答案:

答案 0 :(得分:1)

是的,有些演员是必要的。很多这是因为你将sqlite的C接口与Objective C混合在一起,你必须观察什么是对象以及什么是基元。你的第一个例子(字符串)就是这样的。 NSString与C的char *有很大的不同。同样,NSNumber跟随它。但请注意,您只需进行一次演员表演,而且来自

const unsigned char *

char *

NSDictionaries应该只存储对象,而不是基元,因此你需要输入NSStrings和NSNumbers,而不是char *和int。

您不希望将指向原始数据的指针(如(int *))插入到NSDictionary中,首先将它们转换为对象,然后在再次获取它们时进行转换。

您可能会对自己有所帮助,例如:

[myMutableDictionary setValue: [NSNumber numberWithInt:2] forKey:@"mykey"];

希望这有帮助。