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很可能正在初始化的数组位于不同的对象中,或者在被引用后被初始化。