Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.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
Iphone 数组总是空的_Iphone_Objective C_Xml - Fatal编程技术网

Iphone 数组总是空的

Iphone 数组总是空的,iphone,objective-c,xml,Iphone,Objective C,Xml,可能重复: 我正在制作一个iPhone应用程序,目前为止,我正在从我的服务器接收数据,使用这些数据创建对象,并用这些对象填充一个数组 我的数据是XML格式,并保存为字符串,然后转换为NSData对象,如下所示: NSMutableURLRequest *myRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://my.URL/data.php"]]; [myRequest setHTTPMetho

可能重复:

我正在制作一个iPhone应用程序,目前为止,我正在从我的服务器接收数据,使用这些数据创建对象,并用这些对象填充一个数组

我的数据是XML格式,并保存为字符串,然后转换为
NSData
对象,如下所示:

NSMutableURLRequest *myRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://my.URL/data.php"]];
[myRequest setHTTPMethod:@"POST"];

NSURLResponse *response;
NSError *error = NULL;
NSData *myReturn = [NSURLConnection sendSynchronousRequest:myRequest returningResponse:&response error:&error];
NSString *returnString = [[NSString alloc] initWithData:myReturn encoding:NSASCIIStringEncoding];
 NSData *tempData = [return dataUsingEncoding:NSUTF8StringEncoding];
之后,我将执行标准的objective-C XML事件解析,但在使用以下方法之前,我不会创建任何内容:

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    if ([elementName isEqual:@"id"])
    {
        hailID = currentValue;
        return;
    }
    if ([elementName isEqual:@"timestamp"])
    {
        timeStamp = currentValue;
        return;
    }
    if ([elementName isEqual: @"lat"])
    {
        hailLat = currentValue;
        return;
    }
    if ([elementName isEqual:@"lng"])
    {
        hailLng = currentValue;
        return;
    }
    if ([elementName isEqual:@"address"])
    {
        address = currentValue;
        return;
    }
    if ([elementName isEqual:@"serviceType"])
    {
        serviceType = currentValue;
        return;
    }
    if ([elementName isEqual: @"hail"])
    {
        Hail *newHail = [[Hail alloc]init];
        newHail.hailID = hailID;
        newHail.hailLat = hailLat;
        newHail.hailLng = hailLng;
        newHail.address = address;
        newHail.timeStamp = timeStamp;
        newHail.serviceType = serviceType;
        [hails addObject:newHail];
        NSLog(@"%u", [hails count]);
        return;
    }

}
hails
在头文件中声明,它只是一个
NSMutableArray
,容量为10000项。
Hail
对象是一个单独的类。
NSLog
总是返回0,即使我知道XML代码本身是有效的,并且
hail
对象存在

你知道为什么
hails
数组总是零吗

编辑:很抱歉,我忘了提到
hails
数组是在
-(void)viewDidLoad
方法中初始化的,如下所示:

hails = [[NSMutableArray alloc]initWithCapacity:10000];

您的hail始终为零,因为您从未分配+初始化它。您甚至没有在代码中提到它的初始化

当“Hail”对象本身初始化时,Hail类中的NSArray是否已初始化?发布initmethod。尝试
NSLog(@“%@”,hails)
–如果您的数组实际上是
nil
,我不会感到惊讶。如果
hails
是一个弱属性/引用,并且它是
NSMutableArray
的唯一引用,则可能会发生这种情况。如果是这种情况,您可以尝试创建一个私有强属性,而不是使用ivar。行初始化
hails
在哪里?您确定在为其分配
newHail
时已初始化它吗?我建议在那里设置一个断点,然后逐步遍历代码。您需要向我们证明,
hails
确实存在于最后的
if
语句中。有一百种不同的错误可能导致它不存在,即使你“确定”它是被创建的。那么,你如何声明具有10000个元素容量的数组不初始化它呢?他是怎么说的。检查hails是否不是弱属性。hails不是弱属性,它是非原子的,strong很可能正在初始化的数组位于不同的对象中,或者在被引用后被初始化。