2010-09-13 4 views
1

Я использую NSURLConnection, чтобы получить содержимое файла plist с удаленного сервера.NSArray от NSString (в формате plist)

При подключении: didRecieveData: Я добавляю последние данные в NSMutableString.

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

Я просто надеялся, что может быть проще?

Благодаря

ответ

0

я сделать то же самое в своих приложениях, я использую ASIHttpRequest, который отлично работает. После возвращения моей строки я переводил словарь.

NSDictionary *dict = [[NSDictionary alloc] initWithDictionary:myString]; 

Этот словарь я отправляю в класс parse, из которого я могу получить объект.

xmlTrainNumber* fileResult = [[[xmlTrainNumber alloc] initWithDictionary:dict] autorelease]; 

класс xmlTrainNumber выглядит следующим образом:

#import "xmlTrainNumber.h" 
#import "trainNumberResultSet.h" 

@interface xmlTrainNumber (Private) 

- (NSArray*)_parseXmlDictionary:(NSDictionary*)aDictionary; 

@end 

@implementation xmlTrainNumber 

@synthesize timeXmlResult; 

- (id)initWithDictionary:(NSDictionary*)aDictionary 
{ 
    self = [super init]; 
    if (self) 
    { 
     timeXmlResult = [self _parseXmlDictionary:aDictionary]; 
    } 
    return self; 
} 

- (NSArray*)_parseXmlDictionary:(NSDictionary*)aDictionary 
{ 
    if (aDictionary != NULL && [aDictionary count] > 0) 
    { 
     NSNumber *version = [aDictionary objectForKey:@"version"]; 
     NSNumber *statusCode = [aDictionary objectForKey:@"statusCode"]; 

     if ([[statusCode stringValue] isEqualToString:@"1"]) 
     { 
      NSString *title = [aDictionary objectForKey:@"title"]; 
      if (version != NULL) 
      { 
       NSArray* results = [aDictionary objectForKey:@"results"]; 

       if (results != NULL) 
       { 
        NSMutableArray* result = [[NSMutableArray alloc] init]; 
        for (NSDictionary* currentResult in results) 
        { 
         // TODO: add error handling 
         [result addObject:[[trainNumberResultSet alloc] initWithStation:[currentResult objectForKey:@"station"] 
                       arrival:[currentResult objectForKey:@"arrival"] 
                       departure:[currentResult objectForKey:@"departure"] 
                      newArrival:[currentResult objectForKey:@"newArrival"] 
                      newDeparture:[currentResult objectForKey:@"newDeparture"] 
                     expectedArrival:[currentResult objectForKey:@"expectedArrival"] 
                     expectedDeparture:[currentResult objectForKey:@"expectedDeparture"] 
                        track:[currentResult objectForKey:@"track"] 
                        info:[currentResult objectForKey:@"info"] 
                        title:title]]; 
        } 

        return result; 
       } 
       else 
       { 
        // TODO: throw exception instead 
        return NULL; 
       } 
      } 
      else 
      { 
       // TODO: throw exception instead 
       return NULL; 
      } 
     } 
     else { 
      return nil; 
     } 

    } 
    else 
    { 
     // TODO: throw exception instead 
     return NULL; 
    } 
} 

- (NSArray*)getTimeResult 
{ 
    return timeXmlResult; 
} 

- (void)dealloc 
{ 
    if (timeXmlResult != NULL) 
    { 
     [timeXmlResult release]; 
    } 
    [super dealloc]; 
} 

@end 

Класс trainNumberResultSet просто класс с некоторыми сеттеров, сохраняющий данные, присвоенные. У меня есть код todo в этом коде ... но я надеюсь, что это все равно поможет вам. Меня устраивает. Массив - это список объектов trainNumberResultSet.

Смежные вопросы