2013-03-20 4 views
-1

Английский не мой родной язык; пожалуйста, извините ошибки ввода.iPhone получить данные из plist

Я читал подобные вопросы, но я не мог найти ничего, что могло бы решить мою проблему ..

Я делаю приложение iPhone, который показывает список заметок в виде таблицы, и пользователь может добавлять и удалять заметка.

Когда я добавить новое примечание к серверу, я получаю PLIST, который выглядит следующим образом:

<plist> 
    <dict> 
     <key>success</key><true /> 
     <key>note</key><string>new note</string> 
    </dict> 
</plist> 

После пользователь нажимает кнопку add, запросить соединение с сервером, и я,

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ 
    [resultData appendData:data]; 
} 

, а затем

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{ 
    NSError *sendError; 
    NSArray *result = [NSPropertyListSerialization propertyListWithData:resultData options: NSPropertyListMutableContainersAndLeaves format:NULL error:&sendError]; 
    if([result count] > 0){ 
     for(NSDictionary *dict in result){ 
      for(NSDictionary *dict in result){ 
       // This gives me an error "objectForKey: unrecognized selector to instance" 
       NSLog(@"%@", [dict objectForKey:@"success"]); 
      } 
     } 
    } 
} 

Я думал, что dict может быть не словарь, поэтому я попробовал NSLog(@"%@", dict);, и он показывает только success. Но, я до сих пор не знаю, как я могу получить значение success.

+0

@Manohar Нет, это неправильно, и это даже не имеет никакого отношения к проблеме. – 2013-03-20 05:38:34

+0

@Manohar Что? Я не вижу ни одного массива в этом списке свойств. Это словарь. – 2013-03-20 05:42:08

+0

У меня на самом деле нет plist. Когда я добавляю новую заметку, plist возвращается с сервера. Должен ли я делать это вместо этого? 'NSArray * result = [Свойство NSPropertyListSerializationListWithData: resultData options: NSPropertyListMutableContainersAndLeaves format: NULL error: & sendError];' В этом случае должно быть мое имя plist? – kabichan

ответ

0

Возвращаемое значение метода на NSPropertyListSerialization - вполне логично - корневой объект списка свойств, который вы получаете. Итак, result - это NSDictionary (я даже не могу представить, почему вы предполагаете, что это массив ...!?). Попробуйте это:

NSLog(@"%@", [result objectForKey:@"success"]); 
+0

@kabichan Что? – 2013-03-20 05:50:19

+0

Извините, я попал в него по ошибке, прежде чем завершить свой комментарий. Пожалуйста, см. Мой комментарий выше .. – kabichan

+0

@kabichan Почему вы не читаете мой ответ? Я имею в виду, ** полностью. ** От начала до конца. Когда вы используете цикл for-in в словаре, он перечислит ** клавиши **. Тебе не нужна какая-то зацикленная глупость. Просто используйте 'result', так как вы будете использовать любой обычный словарь. И попытайтесь получить здравый смысл. И прочитайте документацию. – 2013-03-20 05:54:35

1

Попробуйте ::

.h файла

@property (nonatomic,retain) NSDictionary *dict; 

.m файл

NSString *errorDesc = nil; 
NSPropertyListFormat format; 
NSString *rootPath; 

rootPath = [[NSBundle mainBundle] pathForResource:@"FILE_NAME" 
               ofType:@"plist"]; 

NSData *plistXML = [[NSFileManager defaultManager] contentsAtPath:rootPath];  

dict = (NSDictionary *)[NSPropertyListSerialization propertyListFromData:plistXML mutabilityOption:NSPropertyListMutableContainersAndLeaves format:&format errorDescription:&errorDesc]; 

//NSLog(@"PLIST retrive:%@",plistXML);  
if (!dictLang) { 
    NSLog(@"Error reading plist: %@, format: %d", errorDesc, format); 
} 

Get Value ::

NSLog(@" Success :: %@", [dict objectForKey:@"success"]); 

Надеюсь, это поможет вам.

Спасибо.

0
if ([[NSPropertyListSerialization propertyListWithData:resultData options: NSPropertyListMutableContainersAndLeaves format:NULL error:nil] isKindOfClass:[NSDictionary class]]) 
    { 
     NSMutableDictionary *tempDicts = [NSPropertyListSerialization propertyListWithData:nil options: NSPropertyListMutableContainersAndLeaves format:NULL error:nil]; 
    } 
    else if ([[NSPropertyListSerialization propertyListWithData:resultData options: NSPropertyListMutableContainersAndLeaves format:NULL error:nil] isKindOfClass:[NSArray class]]) 
    { 
     NSMutableArray *tempDicts = [NSPropertyListSerialization propertyListWithData:nil options: NSPropertyListMutableContainersAndLeaves format:NULL error:nil]; 
    } 
Смежные вопросы