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应用程序。