我目前正在尝试连接到Web服务器,并从中使用表。我已将表放入NSMutable数组(它是全局的),将其命名为DataSet(我使这部分工作)。但是,当我尝试在其上执行任何类型的操作时(例如:count),它将给我一个EXC_BAD_ACCESS。顺便说一句,我使用带有ARC的xcode 4.2,因此它不是内存管理问题。有什么建议吗?
- (void)viewDidLoad
{
NSURL *url = [NSURL URLWithString: @"`url.com`"];
NSData *jsonData =[NSData dataWithContentsOfURL:url];
if(jsonData)
{
xmlParser = [[NSXMLParser alloc] initWithData: jsonData];
[xmlParser setDelegate: self];
[xmlParser parse];
}
NSLog(@"This is Number of elements: %@",[DataSet count]); ///<----EXC_BAD_ACCESS
..... //// default stuff//.....
}
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if ([elementName isEqualToString:@"string"])
{
/// puts the data into Array luckyNumbers
NSError *error;
SBJsonParser *json = [[SBJsonParser new] init];
DataSet = [[NSMutableArray alloc] init];
DataSet = [json objectWithString:soapResults error:&error];
/// NSLog(@"%@",DataSet); /// this works
}
}
我不确定我是否想要,但我读到我应该使用Diagnostics,所以我打开了NSZombie对象,Malloc后卫和Malloc Stack。 他们说我应该在gdb控制台中键入它 info malloc-history( memorylocation )
我无法让这个工作,所以我尝试使用NSDictionary而不是NSArray,令人惊讶的是它有效!这是我更新的代码,适用于任何想知道我做了什么的人。
{
NSURL *url = [NSURL URLWithString: @"url.com"];
NSData *jsonData =[NSData dataWithContentsOfURL:url];
DataSet = [[NSDictionary alloc] init];
如果(jsonData) {
xmlParser = [[NSXMLParser alloc] initWithData: jsonData];
[xmlParser setDelegate: self];
[xmlParser setShouldResolveExternalEntities:YES];
[xmlParser parse];
}
NSLog(@"%@",DataSet.allKeys);
/////默认的东西/// } }
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if ([elementName isEqualToString:@"string"])
{
//NSLog(@"%@",DataSet);
DataSet = [soapResults JSONValue];
NSLog(@"%@",DataSet);
}
}
答案 0 :(得分:0)
1)在viewDidLoad
添加:
DataSet = [[NSMutableArray alloc] init];
2)在-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
if ([elementName isEqualToString:@"string"])
{
NSError *error;
SBJsonParser *json = [[SBJsonParser new] init];
[DataSet addObject:[json objectWithString:soapResults error:&error]];
[json release];
}
3)之后在DataSet
中将存储所有已解析的对象