2010-07-21 4 views
1

Я пытаюсь вытащить некоторые данные из файла plist и отобразить их в текстовом поле (из клика UIButton). приведенный ниже код вытаскивает адрес plist, а не данные. любая помощь очень ценится. спасибопотянув данные из plist

-(IBAction) buttonPress { 

    NSString *path = [[NSBundle mainBundle] pathForResource:@"messages" ofType:@"plist"]; 
    NSMutableArray *array = [[NSMutableArray alloc] initWithContentsOfFile:path]; 

    [myMessage setText:path]; 
} 
+0

Я также получаю предупреждающее сообщение: «unused variable array» – hanumanDev

+1

Вы удивлены тем, что получаете предупреждение о том, что массив не используется? Если вы посмотрите на код, вы действительно используете его где угодно? – Felixyz

ответ

2

да, вы распечатывания путь, а не какой-либо элемент в массиве. Изменение

[myMessage setText:path]; 

в

[myMessage setText:[array objectAtIndex:x]; //x = whatever index in the array contains your string. 

Также вы можете изменить PLIST содержать Dict, а не массив, так что вы могли бы назвать конкретный текст -

-(IBAction) buttonPress { 

    NSString *path = [[NSBundle mainBundle] pathForResource:@"messages" ofType:@"plist"]; 
    NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:path]; 

    [myMessage setText:[dict objectForKey:@"text"]]; 
} 

В ответ на ваш вопрос о том, arc4random.

Создать перечисление, так что вы можете создать переключатель заявление -

typedef enum { 
    MESSAGE1, 
    MESSAGE2, 
    MESSAGE3 
} messageIDs; 

затем создать случайное число и мод его х, так что вы получите номер 0 и кстати X-1. (В этом случае, так как у нас есть 3 вещи внутри перечисления, х = 3)

int randomValue = arc4random() % 3; 

затем использовать эту случайную Int в распределительном заявление

switch (randomValue) { 
    case MESSAGE1: 
      [myMessage setText:[dict objectForKey:@"message1"]]; //or [myMessage setText:[array objectAtIndex:MESSAGE1]] 
    break; 
    case MESSAGE2: 
      [myMessage setText:[dict objectForKey:@"message2"]]; 
    break; 
    case MESSAGE3: 
      [myMessage setText:[dict objectForKey:@"message3"]]; 
    break; 
    default: 
    break; 
} 

надеюсь, что это работает. Я havent пробовал это раньше ...

+0

, который отлично работал. большое спасибо! следующий вопрос - если я хотел вытащить случайный объект из plist, могу ли я использовать функцию arc4random()? если да, то как это вписывается в [myMessage setText: [dict objectForKey: @ "text"]]; еще раз спасибо. – hanumanDev

+0

проверить мой ответ еще раз, я обновил его, чтобы помочь вам с arc4random(). Не забывайте отмечать этот вопрос как ответ (если он работает!);) – jmont

0

Он делает именно то, что вы ему рассказываете.

Предполагая, что messages.plist содержит массив строк, вы можете легко получить последний элемент в массиве:

[myMessage setText:[array lastObject]]; 
+0

спасибо за помощь. он работает сейчас – hanumanDev

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