Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使用分离的数据解决多个NSURLconnection_Ios_Objective C_Nsurlconnection_Nsjsonserialization - Fatal编程技术网

Ios 如何使用分离的数据解决多个NSURLconnection

Ios 如何使用分离的数据解决多个NSURLconnection,ios,objective-c,nsurlconnection,nsjsonserialization,Ios,Objective C,Nsurlconnection,Nsjsonserialization,我有两个独立的连接 NSURLConnection * connection_users; NSURLConnection * connection_cards; 然后,我用参数等创建了数据,并以以下内容结束: connection_users = [[NSURLConnection alloc] initWithRequest: url_request_users delegate: self startImmediately: YES]; 在委托方法中: - (void) connect

我有两个独立的连接

NSURLConnection * connection_users;
NSURLConnection * connection_cards;
然后,我用参数等创建了数据,并以以下内容结束:

connection_users = [[NSURLConnection alloc] initWithRequest: url_request_users delegate: self startImmediately: YES];
在委托方法中:

- (void) connection: (NSURLConnection *) connection didReceiveData: (NSData *) data
我检查了连接是否用于连接用户:

if (connection == connection_users) / / do something as an example:
NSDictionary * json_response = [NSJSONSerialization JSONObjectWithData: data options: kNilOptions error: & error];
使用来自该方法的“数据”

在关闭“if”之前,我创建到“connection_cards”的下一个连接,做同样的事情

在“如果”之外,但在相同的方法中,我对“连接卡”执行另一个“如果”,并对JSONObjectWithData执行相同的操作

只有来自该方法的“数据”始终是第一个连接。 发生了什么不同?如果启动了第二个连接,那么您应该会收到相应的“数据”。 在启动第二个连接之前已取消第一个连接,以查看是否已解决,但否

如何获得第二次连接的正确“数据”

如果你需要更多的代码,请告诉我

编辑:

如文所问

url_request_users               = [[NSMutableURLRequest alloc] init];
NSMutableString *post_users     = [[NSMutableString alloc] init];
[post_users appendFormat:@"%@", [NSString stringWithFormat:@"email=%@&senha=%@",
                                             [[alert textFieldAtIndex:0] text],
                                             senha_md5]];

[url_request_users setURL:[NSURL URLWithString:WBS_USERS_RECOVER]];
[url_request_users addValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[url_request_users setHTTPMethod:@"POST"];
[url_request_users setHTTPBody:[post_users dataUsingEncoding:NSUTF8StringEncoding]];

connection_users   = [[NSURLConnection alloc] initWithRequest:url_request_users delegate:self startImmediately:YES];

对于n个不同的连接,您将需要n个不同的
NSMutableData
,其中包含相关
NSURLConnection
的结果。你的问题的一个基本例子

NSMutableData *data_users;
NSMutableData *data_cards;
而不是你收到的数据

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    if (connection == connection_users) {
        [data_users appendData:data];
    } else if ( connection == connection_cards) {
        [data_cards appendData:data];
    }  
}
这样,您就可以分别跟踪数据和连接。记住在连接结束时清除数据的剩余部分

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    if (connection == connection_users) {
        // use data from data_users
        NSDictionary * json_response = [NSJSONSerialization JSONObjectWithData:[data_users copy] options: kNilOptions error: & error];
        data_users = [[NSMutableData alloc] init]; // clear data users
    }
    // do the same for cards connection
}
最后一件事是在调用此函数之前分配数据

url_request_users               = [[NSMutableURLRequest alloc] init];
NSMutableString *post_users     = [[NSMutableString alloc] init];
[post_users appendFormat:@"%@", [NSString stringWithFormat:@"email=%@&senha=%@",
                                             [[alert textFieldAtIndex:0] text],
                                             senha_md5]];

[url_request_users setURL:[NSURL URLWithString:WBS_USERS_RECOVER]];
[url_request_users addValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[url_request_users setHTTPMethod:@"POST"];
[url_request_users setHTTPBody:[post_users dataUsingEncoding:NSUTF8StringEncoding]];

data_users = [[NSMutableData alloc] init]; // add this line in your code 
connection_users   = [[NSURLConnection alloc] initWithRequest:url_request_users delegate:self startImmediately:YES];

您有多少个数据对象?显示他们的管理。我不进行管理,因为我获取NSData方法并应用JSONOBjectWithData以获取NSDictionary返回。显示URL连接委托方法中的代码。我编辑了我的问题并添加了,看看这是否是你想要的。感谢didReceiveData:方法的代码。您使用“数据”属性所做的一切。如果您需要更多信息,请告诉我是的,我需要。如果只接收NSData而不接收可变数据,则执行“JSONObjectWithData”操作?JSONObjectWithData:[数据\用户复制]。。。对象的copy方法将创建该对象的不可变副本。相反,您可以通过调用[unmutableData mutableCopy]OK从NSData获取NSMutableData,但为什么要使用“didfinishloading”而不是“didreceivedata”?每次连接调用都可以多次调用didreceivedata。如果您获取大数据,您将看到DidReceiveData多次被调用(例如,对于您的连接卡)。这就是为什么在连接关闭之前,您会将数据堆积在DidReceiveData上,然后在connectionDidFinishLoading上使用/解析它