iPhone编码:从XML文件接收数据,并希望保存到SQLite
问题描述:
我想设置一个iPhone应用程序,从互联网上拉XML文件,然后希望它保存到SQLite数据库。我使用的解析器XML文件中的编码是:iPhone编码:从XML文件接收数据,并希望保存到SQLite
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。我试过的东西会出现在记忆中。我知道这是简单的东西,但不能很好地处理这个问题。
希望有人可以帮助我这个。
我期待着收到你的回复
答
关于你的记忆问题。你发布了所有的对象吗?任何时候你输入Alloc,新或复制,你负责该对象,并且必须在你的代码的某个阶段释放它。
而不是SQLite,使用核心数据。核心数据使用SQLite作为其后台存储并以面向对象的方式存储数据。
创建项目时,您需要选中核心数据的复选框。
[NSEntityDescription insertNewObjectForEntityForName:@"TABLENAME" inManagedObjectContext:context];
MODEL_OBJECT.uniqueId = [Data objectForKey:@"id"];
MODEL_OBJECT.title = [Data objectForKey:@"title"];
对于一个很好的例子,观看斯坦福的讲座12(核心数据和表视图):
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];
插入数据被如下进行:
查询核心数据按如下规则进行为iOS iOS iTunes U模块开发应用程序。
- MODEL_OBJECT将在您创建NSManagedObjects自动创建的NSManagedObject实体对象。
道歉,如果这不能回答你的问题,但使用核心数据比SQL应用程序更有效率的iPhone应用程序。