我不是来自xcode背景,而是来自java和c#。现在我正在尝试将我的应用程序更改为ios,并且不确定我是否理解如何正确地转换,或者更重要的是,什么是xcode问题!
我试图做一些非常简单的事情,从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" ];但这句话
用ARC不允许隐式转换“int”到“id”
也试过
[myDictionary setValue: (int *)sqlite3_column_int(sqlStatement, 0) forKey:@"myInt" ];但我得到
非目标C指针类型'int‘到'id’的隐式转换在ARC中是不允许的
我对文本也尝试过同样的方法。如果我做得不对,请有人告诉我。
即使是这样的事情也不起作用
int *myVar = sqlite3_column_int(sqlStatement, 0);如果我也改变它
int myVar = sqlite3_column_int(sqlStatement, 0);它确实有效,那么我就不能将它填充到NSDictionary中,因为这个错误
[myDictionary setValue:myVar forKey:@"intValue"];发布于 2015-03-23 17:04:33
是的,有些铸造是必要的。很大程度上是因为你把sqlite的C接口和目标C混合在一起,你必须观察什么是对象,什么是原语。您的第一个示例(string)基本上就是它的样子。NSString与C的char *有很大的不同,同样,后面的NSNumber也是如此。但是请注意,你只做了一个演员,这是
const unsigned char *至
char *NSDictionaries只应该存储对象,而不是原语,因此您需要放入NSStrings和NSNumbers,而不是char *和int。
您不希望将指向原语的指针(如(int *) )插入到NSDictionary中,首先将它们转换为对象,然后在再次获取它们时将它们取消转换。
下面的快捷例程可能会对您有所帮助:
[myMutableDictionary setValue: [NSNumber numberWithInt:2] forKey:@"mykey"];希望这能有所帮助。
https://stackoverflow.com/questions/29215791
复制相似问题