首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用sqlite3铸造

用sqlite3铸造
EN

Stack Overflow用户
提问于 2015-03-23 16:49:52
回答 1查看 73关注 0票数 1

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

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

我希望得到诸如long、int和string这样的值,似乎我必须进行各种类型的转换才能使编译器喜欢它。能不能有人给我指明正确的方向,就像我应该写的一样,这并不是必要的。

在这个例子中,我的字典变量名为myDictionary。

向NSDictionary添加字符串

代码语言:javascript
复制
[myDictionary setValue:[[NSString alloc] initWithUTF8String:(char *)sqlite3_column_text(sqlStatement, 4)] forKey:@"myText"];

将int添加到NSDictionary

代码语言:javascript
复制
[myDictionary setValue: [[NSNumber alloc] initWithUnsignedInt:sqlite3_column_int(sqlStatement, 0)] forKey:@"myInt" ];

这一切真的必要吗?我以为我可以做这样简单的事情

将int添加到NSDictionary

代码语言:javascript
复制
[myDictionary setValue: sqlite3_column_int(sqlStatement, 0) forKey:@"myInt" ];

但这句话

用ARC不允许隐式转换“int”到“id”

也试过

代码语言:javascript
复制
[myDictionary setValue: (int *)sqlite3_column_int(sqlStatement, 0) forKey:@"myInt" ];

但我得到

非目标C指针类型'int‘到'id’的隐式转换在ARC中是不允许的

我对文本也尝试过同样的方法。如果我做得不对,请有人告诉我。

即使是这样的事情也不起作用

代码语言:javascript
复制
int *myVar = sqlite3_column_int(sqlStatement, 0);

如果我也改变它

代码语言:javascript
复制
int myVar = sqlite3_column_int(sqlStatement, 0);

它确实有效,那么我就不能将它填充到NSDictionary中,因为这个错误

代码语言:javascript
复制
[myDictionary setValue:myVar forKey:@"intValue"];
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-23 17:04:33

是的,有些铸造是必要的。很大程度上是因为你把sqlite的C接口和目标C混合在一起,你必须观察什么是对象,什么是原语。您的第一个示例(string)基本上就是它的样子。NSString与C的char *有很大的不同,同样,后面的NSNumber也是如此。但是请注意,你只做了一个演员,这是

代码语言:javascript
复制
const unsigned char *

代码语言:javascript
复制
char *

NSDictionaries只应该存储对象,而不是原语,因此您需要放入NSStrings和NSNumbers,而不是char *和int。

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

下面的快捷例程可能会对您有所帮助:

代码语言:javascript
复制
[myMutableDictionary setValue: [NSNumber numberWithInt:2] forKey:@"mykey"];

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29215791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档