Ios Objective-C下载PLIST并在表中使用
我对Objective-C编程相当陌生。我正在尝试构建一个个人应用程序,用于查看包含在web服务器上的事件信息。我希望每个事件标题字符串在UITableView中显示为单独的一行 我正在使用MySQL创建plist。我的plist是这样的: 我正在下载plist,如下所示:Ios Objective-C下载PLIST并在表中使用,ios,objective-c,uitableview,Ios,Objective C,Uitableview,我对Objective-C编程相当陌生。我正在尝试构建一个个人应用程序,用于查看包含在web服务器上的事件信息。我希望每个事件标题字符串在UITableView中显示为单独的一行 我正在使用MySQL创建plist。我的plist是这样的: 我正在下载plist,如下所示: NSString *stringURL = @"http://www.example.com/events.plist"; NSURL *url = [NSURL URLWithString:string
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"];
现在我有麻烦了。现在,当我调试“事件”字典中的行数时,它返回0
因此,我无法设置“numberOfRowsInSection”。[title objectAtIndex:indexath.row]
也不起作用
我相信问题在于如何设置NSDictionary,但由于缺乏Objective-C和数组知识,我无法克服这个问题。这是您的问题:
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];
}
这是你的问题:
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];
}
请检查是否首先将文件正确存储在文档目录中“标题”是什么?它是数组还是字符串?在我看来是字符串,所以不能调用
[title objectAtIndex:indexath.row]
您好,是的,它存储正确。我可以在appdata中看到它。“标题”是数组。标题不是数组。键事件标题
的值是一个字符串。因此[events objectForKey:@“Event Title”]
将返回一个NSString。因此,即使您将变量title键入为NSArray,您也在为其分配NSString。请检查您是否首先将文件正确存储在文档目录中什么是“title”?它是数组还是字符串?在我看来是字符串,所以不能调用[title objectAtIndex:indexath.row]
您好,是的,它存储正确。我可以在appdata中看到它。“标题”是数组。标题不是数组。键事件标题
的值是一个字符串。因此[events objectForKey:@“Event Title”]
将返回一个NSString。因此,即使您将变量title键入为NSArray,您也在为其分配一个NSString(int i=0;iHi Neil,这似乎很有效,谢谢。我现在可以获得正确的事件数。但是,现在有一个问题,我如何将所有的“title”放入一个数组中以用于单元格文本?title=[events objectForKey:@“Event title”]在title是数组或字典时不起作用。我得到:-[\NSCFArray objectForKey:]:发送到的选择器无法识别instance@hart1994我会在上面的答案中加上这些。@neilco现在你的答案已经完成了,这就是我为什么要说出你的答案answer@neilco谢谢。它现在在每一行中显示事件标题,这很好。但是,当向下滚动列表时,它会因以下错误而崩溃:**-[\uu NSArrayM objectAtIndex:]:发送到解除分配实例0x16eabac0的消息我一直在尝试解决此问题。我相信这是由于范围异常,但我不知道如何修复。提前感谢。若要添加此消息,您需要使用for循环遍历数组:for(int i=0;iHi Neil,这似乎很有效,谢谢。我现在可以获得正确的事件数。但是,现在有一个问题,我如何将所有的“title”放入一个数组中以用于单元格文本?title=[events objectForKey:@“Event title”]在title是数组或字典时不起作用。我得到:-[\NSCFArray objectForKey:]:发送到的选择器无法识别instance@hart1994我会在上面的答案中加上这些。@neilco现在你的答案已经完成了,这就是我为什么要说出你的答案answer@neilco谢谢。它现在在每一行中显示事件标题,这很好。但是,当向下滚动列表时,它会因以下错误而崩溃:**-[\uu NSArrayM objectAtIndex:]:发送到解除分配实例0x16eabac0的消息我一直在尝试解决此问题。我相信这是由于范围异常造成的,但我不知道如何修复。提前感谢。