我正在尝试设置一个iPhone应用程序,它从互联网上提取XML文件,然后希望它保存到SQLite数据库。我用来解析XML文件的编码是:
SQLViewAppDelegate.m
NSURL *url = [[NSURL alloc] initWithString:@"http://www.180designlab.com/waxjambu/getupdates.xml"];
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];
XMLParser *parser = [[XMLParser alloc] initXMLParser];
[xmlParser setDelegate:parser];
BOOL success = [xmlParser parse];
NSLog(@"Info array has %d items", [infoGet count]);
totalCount = [infoGet count];
//[self save_Clicked];
if(success)
NSLog(@"No Errors");
else
NSLog(@"Error Error Error");
XMLParser.m
-(XMLParser *)initXMLParser
{
[super init];
appDelegate = (SQLViewAppDelegate *)[[UIApplication sharedApplication] delegate];
return self;
}
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
{
if ([elementName isEqualToString:@"Updates"])
{
appDelegate.infoGet = [[NSMutableArray alloc] init];
}
else if ([elementName isEqualToString:@"Update"])
{
aInfo = [[XMLInfo alloc] init];
aInfo.infoGetID = [[attributeDict objectForKey:@"id"] integerValue];
//aGetInfo.info
NSLog(@"Info ID Value: %i", aInfo.infoGetID);
}
NSLog(@"Processing Element: %@", elementName);
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if(!currentElementValue)
currentElementValue = [[NSMutableString alloc] initWithString:string];
else
[currentElementValue appendString:string];
//[self saveData];
NSLog(@"Processing Value: %@", currentElementValue);
NSLog(@"Processing ID: %d", aInfo.infoGetID);
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if ([elementName isEqualToString:@"Updates"])
return;
if ([elementName isEqualToString:@"Update"])
{
[appDelegate.infoGet addObject:aInfo];
[aInfo release];
aInfo = nil;
}
else
[aInfo setValue:currentElementValue forKey:elementName];
[currentElementValue release];
currentElementValue = nil;
}
我可以将数据输入到tableView中,但无法解决如何将它们保存到我已经拥有的SQLite文件中。
我也可以从SQLite文件中将数据加载到tableView中。我现在还可以在两个文本字段中输入数据时使用AddView时添加到SQLite。什么我尝试它出现说内存不足。我知道这是一件简单的事情,但是不能正常或者解决这个问题。
希望有人能帮助我。我很期待收到你的回复
答案 0 :(得分:0)
关于你的记忆问题。你发布了所有物品吗?每当您键入 Alloc ,新或复制时,您都要对该对象负责,并且必须在代码的某个阶段将其释放。
使用Core Data代替SQLite。 Core Data使用SQLite作为其后备存储,并以面向对象的方式存储数据。
创建项目时,您需要选择Core Data的复选框。
查询核心数据的过程如下:
NSFetchRequest *request = [[NSFetchRequest alloc] init];
request.entity = [NSEntityDescription entityForName:@"TABLENAME" inManagedObjectContext:context];
request.predicate = [NSPredicate predicateWithFormat:@"uniqueId = %@", [Data objectForKey:@"id"]];
NSError *error = nil;
NSManagedContext *returnedData = [[context executeFetchRequest:request error:&error] lastObject];
[request release];
按如下方式插入数据:
[NSEntityDescription insertNewObjectForEntityForName:@"TABLENAME" inManagedObjectContext:context];
MODEL_OBJECT.uniqueId = [Data objectForKey:@"id"];
MODEL_OBJECT.title = [Data objectForKey:@"title"];
举一个很好的例子,观看斯坦福大学开发的iOS iOS iTunes应用程序的讲座12(核心数据和表格视图)。
如果这不能回答您的问题,请道歉,但使用Core Data比使用iPhone的SQL更有效。