我正在使用NSURLconnection连接到Web服务并接收数据。由于我连接到不同的webservices,我将连接accessibilityLabel设置为描述webservice的字符串。
在委托方法
中-(void) connectionDidFinishLoading:(NSURLConnection *) connection;
我检查connection.accessibilityLabel
并运行相应的代码。
这在模拟器中完美运行。
但是,在iPhone本身上,connection.accessibilityLabel
始终为空。
有谁知道为什么?
(连接仍然正常,我在iPhone上获取数据,我只是不知道如何处理它,因为可访问性标签似乎没有正确设置或被删除或其他东西。)
提前致谢。
编辑:这是我用来建立连接并分配标签的代码
// create the connection with the request
// and start loading the data
ConnectionDelegate *connDel = [[ConnectionDelegate alloc] init];
connDel.delegate = self;
conn = [[NSURLConnection alloc] initWithRequest:theRequest delegate:connDel];
conn.accessibilityLabel = label;
if (conn) {
// Create the NSMutableData to hold the received data.
// receivedData is an instance variable declared elsewhere
connDel.webData = [[NSMutableData data] retain];
} else {
// Inform the user that the connection failed.
NSLog(@"Connection Failed");
}
答案 0 :(得分:1)
不确定为什么您的accessibilityLabel仅在模拟器上工作,但可以在此问题的已接受答案中找到更可扩展的方法:Managing multiple asynchronous NSURLConnection connections
基本上你可以创建一个可变的CFDictionary,你的连接作为一个键,你想要的任何值(在链接的答案中,他使用receivedData对象,但你可以使用你想要的任何东西)。
因此,为了适应您的情况,您可以采取以下措施:
在创建请求之前:
connectionToInfoMapping =
CFDictionaryCreateMutable(
kCFAllocatorDefault,
0,
&kCFTypeDictionaryKeyCallBacks,
&kCFTypeDictionaryValueCallBacks);
创建每个连接后:
CFDictionaryAddValue(
connectionToInfoMapping,
connection,
[NSMutableDictionary
dictionaryWithObject:@"someName"
forKey:@"connectionName"]);
然后在您的connectionDidFinishLoading:
方法中:
-(void) connectionDidFinishLoading:(NSURLConnection *) connection
{
NSMutableDictionary *connectionInfo = CFDictionaryGetValue(connectionToInfoMapping, connection);
NSString *connectionName = (NSString *)[connectionInfo objectForKey:@"connectionName"];
if ([connectionName isEqualToString:@"connectionA"]) {
//Do something
}
}
上面的内容可以很容易地扩展为通过连接映射多个属性(只需向添加到CFDictionary的NSMutableDictionary添加更多的键和值)。
答案 1 :(得分:0)
我认为问题在于使用accessibilityLabel
。查看它的文档,它旨在用于UIKit控件,以在可访问性元素上显示正确的标签。它在NSURLConnection
对象上的行为未定义。我认为您需要找到另一种方法来识别您的代表的Web服务。
使用NSDictionary
中的ConnectionDelegate
将网络服务与有效连接相关联,建议使用@theChrisKent。
您还可以创建NSURLConnection的子类并添加webServiceLabel
iVar&属于那个。