Кодирование iPhone: получение данных из XML-файла и его сохранение в SQLite - PullRequest
1 голос
/ 01 марта 2011

Я пытаюсь настроить приложение для 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, который у меня есть.

Я также могу загрузить данные в tableView из файла SQLite.Также теперь, как добавить в SQLite при использовании AddView при вводе данных в двух текстовых полях.все, что я пытаюсь сделать, всплывает из памяти.Я знаю, что это будет что-то простое, но просто не могу нормально или с этим разобраться.

надеюсь, кто-то может мне помочь с этим.

Я с нетерпением жду ответа от вас

1 Ответ

0 голосов
/ 01 марта 2011

Относительно вашей проблемы с памятью.Вы выпустили все свои объекты?Каждый раз, когда вы набираете Alloc , New или Copy , вы несете ответственность за этот объект и должны освободить его на каком-то этапе в вашем коде.

Вместо SQLite используйте Core Data.Базовые данные используют SQLite в качестве резервного хранилища и хранят данные объектно-ориентированным способом.

Вам необходимо установить флажок для Базовых данных при создании проекта.

Запрос к Базовым данным выполняется какследующим образом:

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"];

Для хорошего примера посмотрите лекцию 12 (Основные данные и представления таблиц) из Стэнфордского приложения для разработки для iOS, iTunes Umodule.

  • MODEL_OBJECT будет объектом сущности NSManagedObject, который автоматически создается при создании объектов NSManagedObject.

Извинитесь, если это не отвечаетваш вопрос, но использование Core Data намного эффективнее, чем SQL для iPhone-приложений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...