每对的第二个对象必须是非零。或者,您是不是忘记零终止您的参数列表?

Posted

技术标签:

【中文标题】每对的第二个对象必须是非零。或者,您是不是忘记零终止您的参数列表?【英文标题】:second object of each pair must be non-nil. Or, did you forget to nil-terminate your parameter list?'每对的第二个对象必须是非零。或者,您是否忘记零终止您的参数列表? 【发布时间】:2016-05-11 09:00:15 【问题描述】:

这是我的代码

NSMutableArray * myArray = [[NSMutableArray alloc]init];

NSMutableDictionary * myData = [[NSMutableDictionary alloc]init];
[myData setValue:@"151" forKey:@"LoginID"];
[myData setValue:@"0" forKey:@"UserID"];
[myData setValue:@"0" forKey:@"SubUserID"];
[myData setValue:@"92" forKey:@"WorkGroupID"];
[myData setValue:@"Doctor" forKey:@"WorksFor"];
[myData setValue:@"0" forKey:@"UserWorkGroup"];

[myArray addObject:myData];

myData = [[NSMutableDictionary alloc]init];
[myData setValue:@"," forKey:@"SortingName"];
[myData setValue:@"1" forKey:@"Searching"];
[myData setValue:@"Desc" forKey:@"SortingOrder"];
[myData setValue:@"10" forKey:@"RecordsCount"];
[myData setValue:@"0" forKey:@"PageIndex"];
[myArray addObject:myData];

NSData *dataToSend = [NSJSONSerialization dataWithJSONObject:myArray options:0 error:nil];
NSString *jsonString = [[NSString alloc] initWithData:dataToSend encoding:NSUTF8StringEncoding];

[getProfileServices sendSynchronousPostRequestWithStringForAction:getProfileURL andParameters:[[NSDictionary alloc]initWithObjectsAndKeys:jsonString ,nil]andRequestType:@"POST"];

当我运行它时,我得到了这个错误

NSInvalidArgumentException,原因:-[__NSPlaceholderDictionary initWithObjectsAndKeys:]: 每对的第二个对象必须为非零。或者,您是否忘记零终止您的参数列表? *** 首先抛出调用栈:

【问题讨论】:

错误消息告诉你确切地问题是什么:你有initWithObjectsAndKeys:jsonString ,nil - 错误消息指出每对的第二个对象必须是非零! 我也试过了,但没用 为什么andParameters 需要字典,它是做什么用的?你为什么要传递 json? 尝试过什么???您只需要修复编译错误。 我尝试删除 nil 但在方法调度中显示缺少哨兵 【参考方案1】:

NSDictionaryNSMutableDictionary 中设置字符串值和字符串键。例子: 下面的例子是正确的格式,

[myData setValue:@"1" forKey:@"Searching"];

不要发送 nil 值和 nil 键。

不要在字典中发送 , 内部值

你的错误在下面给出

[myData setValue:@"," forKey:@"SortingName"];

上面的问题是","

改代码如下,

[myData setValue:@"String Value" forKey:@"SortingName"];

请更改以下代码,

[getProfileServices sendSynchronousPostRequestWithStringForAction:getProfileURL andParameters:[[NSDictionary alloc] initWithObjectsAndKeys:dataToSend] andRequestType:@"POST"];

希望对你有帮助

【讨论】:

你的回答不是很容易理解——你认为 OP 应该改变什么,什么可以为他解决问题? 只用逗号设置值(这里的“,”是唯一的字符串)你觉得有问题吗?我不这么认为。 是的是不发送字典值,我上面的代码明显更新了 ***.com/questions/6345637/… 看例子 什么是getProfileServices

以上是关于每对的第二个对象必须是非零。或者,您是不是忘记零终止您的参数列表?的主要内容,如果未能解决你的问题,请参考以下文章

根据对的第二个值查找对向量的上限

从特定的第一个元素获取向量对的第二个元素

将地图的第一个和第二个值上传到向量对的第一个和第二个值中

配对优先级队列

JavaScript中replace()方法的第二个参数解析

leaq 的第一个操作数必须是内存地址,第二个操作数必须是寄存器吗?