iOS中的NSArray问题

Posted

技术标签:

【中文标题】iOS中的NSArray问题【英文标题】:NSArray issue in iOS 【发布时间】:2015-04-01 06:17:07 【问题描述】:

我正在向 php 服务器发送数组对象。我不确定如何将数组格式数据发送到 php 服务器

当我尝试发送数组格式时,我的数组格式看起来像。如何删除括号和双引号

"(

vdsvvdsvdsv

)"

请让我知道我该如何正确地做到这一点。

【问题讨论】:

请使用post方式发送数组 您的数组可能是可选的。是吗? 您好,Thaks 回复,我正在使用 post Methode,但它没有在后端使用,我正在像这样 [request setHTTPMethod: @"POST"]; [请求 setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"]; [请求 setHTTPBody:[[NSString stringWithFormat:@"userid=%@&projectSponsor=%@&projectid=%@", userId,addSponsorEmailStringInModel,projectId] dataUsingEncoding:NSUTF8StringEncoding]]; 请在您的问题中添加代码并格式化,不要在 cmets 中添加。该代码中的数组是什么? 【参考方案1】:

这一行

[request setHTTPBody:[[NSString stringWithFormat:@"userid=%@&projectSponsor=%@&projectid=%@", userId,addSponsorEmailStringInModel,projectId] dataUsingEncoding:NSUTF8StringEncoding]];

实际上应该是两部分

NSString *emails = [addSponsorEmailStringInModel componentsJoinedByString:@","];
[request setHTTPBody:[[NSString stringWithFormat:@"userid=%@&projectSponsor=%@&projectid=%@", userId,emails,projectId] dataUsingEncoding:NSUTF8StringEncoding]];

这样您就可以将数组显式转换为服务器期望的字符串格式

【讨论】:

我得到 tz 错误 'NSInvalidArgumentException',原因:'-[__NSCFString componentsJoinedByString:]: 无法识别的选择器 那么您什么时候创建addSponsorEmailStringInModel 以及如何创建?【参考方案2】:

您需要先将NSArray 转换为NSData,然后再转换为JSON 字符串,然后再将其发送到服务器。

希望此链接对您有所帮助:https://***.com/a/10323594/3336675

编辑:

NSMutableString *jsonString = [[NSMutableString alloc]initWithString:@"\"userId\":\""];
[jsonString appendFormat:@"%@\",\"projectSponsor\":\"%@\",\"projectId\":\"%@\"", userId, addSponsorEmailStringInModel, projectId];

然后

NSString *urlString = [NSString stringWithFormat:@"%@",@"http://url.com/..."];

NSMutableData *responseData;

NSString* escapedUrlString =[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSURL* serverUrl = [NSURL URLWithString:escapedUrlString];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:serverUrl];

[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; //set value according to your requirement

然后

[request setHTTPBody:[NSString stringWithString:jsonString] dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPMethod:@"POST"];

然后如果你想要返回值,使用这个

NSURLResponse *res = nil;
NSError *err = nil;

NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&res error:&err];//or asynchronous, as you wish

data 现在保存返回的 JSON 对象

【讨论】:

我是否以这种正确的方式发送 [request setHTTPMethod: @"POST"]; [请求 setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"]; [请求 setHTTPBody:[[NSString stringWithFormat:@"userid=%@&projectSponsor=%@&projectid=%@", userId,addSponsorEmailStringInModel,projectId] dataUsingEncoding:NSUTF8StringEncoding]]; 是的,这是正确的方法。只需确保请求正文中的字符串采用正确的 JSON 格式 但是,像这样的后端存储“(vdsvvdsvdsv)”我需要像这样的stroe---- string1,string2 贴出你要调用的API,否则真的很混乱 我说的是 API,我的意思是您尝试通过您的应用调用的完整 URL。还有 HTTP 请求正文格式。例如:URL-something.com/something?请求正文- "userID":"123456789","projectId":"myproject"【参考方案3】:

这取决于为处理输入流而编写的服务器代码。

基本上,服务器传输需要 XML 或 JSON 数据。

对于 JSON,选择一个简单的解析器,如 SBJSONParser 并将数组传递给它。 (使用 sbjson 我们甚至可以转换)

对于 XML,您需要使用 NSDATA 将数据转换为字节,然后将其传递给标记。

【讨论】:

以上是关于iOS中的NSArray问题的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发——NSArray中的字典排序

iOS NSArray数组过滤

从deque到std::stack,std::queue,再到iOS 中NSArray(CFArray)

如何从 iOS 的另一个 nsarray 中不存在的核心数据中删除对象?

IOS/Objective-C:按字符串中的单词数对 NSStrings 的 NSArray 进行排序

Kotlin Multiplatform Mobile:Flow<List<*SomeModel*>> 被映射到 iOS 中的 Flow<NSArray>