从plist中提取数据

时间:2010-07-21 16:48:02

标签: iphone objective-c xcode plist

我正在尝试从plist文件中提取一些数据并将其显示在文本字段中(来自UIButton单击)。下面的代码拉取plist的地址而不是数据。任何帮助是极大的赞赏。感谢

-(IBAction) buttonPress {

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

    [myMessage setText:path];
}

2 个答案:

答案 0 :(得分: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的问题。

创建一个枚举,以便您可以创建一个switch语句 -

typedef enum {
    MESSAGE1,
    MESSAGE2,
    MESSAGE3
} messageIDs;

然后创建一个随机整数并用x修改它,这样你得到一个数字btw 0和x-1。 (在这种情况下,因为我们在枚举中有3个东西,x = 3)

int randomValue = arc4random() % 3;

然后在switch语句中使用random 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;
}
希望这有效。我之前没试过......

答案 1 :(得分:0)

它完全按照你所说的去做。

假设messages.plist包含一个字符串数组,您可以轻松获取数组中的最后一项:

[myMessage setText:[array lastObject]];