iPhone程序在模拟器上工作但在iPhone上没有

时间:2011-04-07 13:08:41

标签: iphone objective-c ios nsurlconnection

我正在使用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");
}

2 个答案:

答案 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&属于那个。