【发布时间】:2014-02-21 16:02:24
【问题描述】:
我创建了一个如下所示的 plist 文件:
从中可以将所有 plist 信息提取到 NSArray 中:
-(NSArray *)Topics
{
if(!_Topics)
{
_Topics = [[NSArray alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"TopicData" ofType:@"plist"]];
}
return _Topics;
}
并使用此数组加载 TopicTitle 的 tableview:
cell.textLabel.text = [[self.Topics objectAtIndex:indexPath.row] valueForKey:@"TopicTitle"];
选择表中的行时,我将名为“问题”的字典传递给如此如下所示的下一个视图控制器:
NSDictionary *questions = [[self.Topics objectAtIndex:indexPath.row] valueForKey:@"Questions"];
[self.detailViewController setQuestions:(questions)];
从这里我想遍历每个“问题”字典,并通过执行以下操作将“问题文本”和“答案一/二...”字符串加载到对象数组中:
TopicQuestions = [NSMutableArray array];
for(NSDictionary *ques in self.Questions)
{
Question* q = [[Question alloc] init];
q.Question = (NSString*)[ques objectForKey:@"QuestionText"];
q.AnswerOne = (NSString*)[ques objectForKey:@"QuestionText"];
q.AnswerTwo = (NSString*)[ques objectForKey:@"QuestionText"];
q.AnswerThree = (NSString*)[ques objectForKey:@"QuestionText"];
q.AnswerFour = (NSString*)[ques objectForKey:@"QuestionText"];
[TopicQuestions addObject:q];
}
但“问题”字典似乎没有可用的数据,它知道有 4 个子对象,但没有这些对象的所有键值对:
所以我的问题是我应该如何将“问题”字典传递给下一个 ViewController,以便我仍然能够访问“问题文本”和“答案一/二...”节点?
或者有没有更好的方法来读取字符串而不循环遍历每个“问题”字典?
【问题讨论】:
-
在您的屏幕截图中,ques 对象是一个字符串,而不是字典。所以里面没有4个项目。我认为您正在不正确地遍历 plist。
-
我不知道为什么 ques 对象是一个字符串,正如您在 for 循环中看到的那样,它被声明为字典,我不遍历 plist - 我把它放入直接来自文件的主题数组
-
在局部变量中,无论你声明一个变量是什么,它都会显示它实际上是什么。我可以将一个 NSString 对象声明为一个 UIView,但这并不能成为一个。
-
好的,所以它必须是一个字符串,因为它只包含字典的值('Question','Question - 2','Question - 3','Question - 4')而不是子元素(QuestionText 和 Answer),我该如何传递“问题”字典,以便保留 4 个子“问题”字典中的每一个的所有元素?
-
将对
valueForKey:的调用替换为对objectForKey:的调用。这有帮助吗?除非您真的想使用键值编码,否则不应使用valueForKey:。
标签: ios dictionary ios7 uitableview plist