试图在 NSMutableDictionary 中设置 Number 类型的对象并得到奇怪的警告
Posted
技术标签:
【中文标题】试图在 NSMutableDictionary 中设置 Number 类型的对象并得到奇怪的警告【英文标题】:Trying to setObject of type Number in NSMutableDictionary and get strange warning 【发布时间】:2012-02-26 20:55:10 【问题描述】:我正在尝试在 NSMutableDictionary 中设置对象并收到奇怪的警告,听到的是代码
if ([errorCode intValue] != -1)
NSLog(@"after getting data back");
NSString *userName = [[protocol3Replay valueForKeyPath:uName]autorelease];
NSString *userPassword = [[protocol3Replay valueForKeyPath:pass]autorelease];
NSNumber *UserId = [[protocol3Replay valueForKeyPath:@"Session.user_id"]autorelease];
NSNumber *customerId = [[protocol3Replay valueForKeyPath:@"Session.customer_id"]autorelease];
BOOL b = [file checkFile];
NSLog(@"after check file exists");
if (b == YES)
NSLog(@"file exist");
NSMutableDictionary *fileDic = [[[NSMutableDictionary alloc]init]autorelease];
fileDic = [file readFile];
[fileDic setObject:[NSNumber numberWithInteger:UserId] forKey:@"user_id"];
[fileDic setObject:token forKey:@"device_token"];
[fileDic setObject:[NSNumber numberWithInteger:customerId] forKey:@"customer_id"];
[fileDic setObject:userName forKey:@"user_name" ];
[fileDic setObject:userPassword forKey:@"user_password" ];
减弱的 si:警告:语义问题:指向整数转换的不兼容指针将“NSNumber *”发送到“NSInteger”(又名“int”)类型的参数
是这样吗?
【问题讨论】:
帮助我们,错误在哪一行?不明白的错误信息怎么办? 顺便说一句,你的代码:'NSMutableDictionary *fileDic = [[[NSMutableDictionary alloc]init]autorelease]; fileDic = [文件读取文件];'有缺陷。第二行分配[file readFile]
的结果,使第一行中fileDic
的分配无关紧要。建议:使用ARC,ios 4及以上版本可用。
这对我有用,谢谢 Zaph
【参考方案1】:
您将UserID
传递给numberWithInteger:
,这需要NSInteger
。这与setObject:
无关。您可能想复制UserID
或直接将UserID
传递给setObject:
。
【讨论】:
【参考方案2】:UserID 是一个 OBJECT,numberWithInteger 的参数是一个 NSInteger,它只是一个整数。 NSInteger 不是 NSNumber 或 NSObject 的子类。不是指针,是整数。
所以你的声明 NSNumber *UserID = ... 应该是 NSInteger userID(没有 * 因为它不是一个指针)。
附言这只是解决问题的一种可能方法。
【讨论】:
试图写:NSNumber UserId = [[protocol3Replay valueForKeyPath:@"Session.user_id"]autorelease];它被标记为错误 那是因为,正如我所说,NSNumber 不是一个对象,它是一个整数。 Autorelease 不是整数的方法。其次,在您调用 valueForKey 然后发送消息 autorelease 的每个语句中都是不正确的。您只向保留的对象发送自动释放。以上是关于试图在 NSMutableDictionary 中设置 Number 类型的对象并得到奇怪的警告的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS 中将 NSMutableDictionary 添加到 NSMutableArray 时崩溃?
为啥 NSString 的 NSArray 可以作为 NSMutableDictionary 的键?
当键看起来像一个 int 时如何访问 NSMutableDictionary?
在 UITableView 中过滤 NSMutableDictionary 数据