Objective-C下载PLIST并在表格中使用

时间:2013-09-24 17:54:34

标签: ios objective-c uitableview

我对Objective-C编程很新。我正在尝试构建一个供个人使用的应用程序,以查看我的Web服务器中包含的事件信息。我希望每个Event Title字符串在我的UITableView中显示为一个单独的行。

我正在使用CFPropertyList从MySQL创建plist。这是我的plist的样子: enter image description here

我正在下载这样的plist:

NSString *stringURL = @"http://www.example.com/events.plist";
        NSURL  *url = [NSURL URLWithString:stringURL];
        NSData *urlData = [NSData dataWithContentsOfURL:url];
        if ( urlData )
        {
            NSArray       *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
            NSString  *documentsDirectory = [paths objectAtIndex:0];

            NSString  *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory,@"events.plist"];
            [urlData writeToFile:filePath atomically:YES];
        }

然后,这就是我试图将信息加载到他们的数组中的方式:

    events = [[NSDictionary alloc] initWithContentsOfFile:filePath];

    ID = [events objectForKey:@"Event ID"];
    title = [events objectForKey:@"Event Title"];
    date = [events objectForKey:@"Event Date"];
    price = [events objectForKey:@"Price"];
    totalTickets = [events objectForKey:@"Total Tickets"];
    ticketsSold = [events objectForKey:@"Tickets Sold"];
    ticketsRemaining = [events objectForKey:@"Tickets Remaining"];
    postStatus = [events objectForKey:@"Post Status"];
    postContent = [events objectForKey:@"Post Content"];

现在,我遇到了麻烦。现在,当我调试'events'字典所包含的行数时,它返回0。

因此我无法设置'numberOfRowsInSection'。 [title objectAtIndex:indexPath.row]也不起作用。

我认为问题在于我如何设置NSDictionary,但由于我缺乏Objective-C和数组知识,我无法克服这个问题。

1 个答案:

答案 0 :(得分:3)

这是你的问题:

events = [[NSDictionary alloc] initWithContentsOfFile:filePath];

你的plist是一个字典数组,你试图将该数组加载为字典。试试这个:

events = [NSArray arrayWithContentsOfFile:filePath];

编辑:要将标题提取到数组中以便在表格单元格中使用它们,请执行以下操作:

NSMutableArray *titles = [NSMutableArray array];
for (NSDictionary *event in events) {
    NSString *title = [event objectForKey:@"Event Title"];
    [titles addObject:title];
}