キーと値を含むplistがあります...言ってみましょう:
key: alpha_male_body_language
value: Alpha Male Body Language
key: building_attraction
value: Building Attraction
key: fifteen_lessons
value: Fifteen Lessons
key: how_can_it_have_gone_wrong
value: How can It Have Gone Wrong
テーブルビューの私の実装は次のとおりです。
#import "BookTitleViewController.h"
#import "BookLessonViewController.h"
@interface BookTitleViewController ()
@end
@implementation BookTitleViewController{
NSDictionary *bookTitles;
}
@synthesize tableView;
@synthesize bookTitles;
- (void)viewDidLoad
{
[super viewDidLoad];
self.bookTitles = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"book" ofType:@"plist"]];
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
self.bookTitles = nil;
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [self.bookTitles count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *simpleTableIdentifier = @"RecipeCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
}
NSString *value = [[self.bookTitles allValues] objectAtIndex:indexPath.row];
//cell.textLabel.text = [recipes objectAtIndex:indexPath.row];
cell.textLabel.text = value;
return cell;
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"ShowBookLesson"]) {
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
BookLessonViewController *destViewController = segue.destinationViewController;
destViewController.bookTitleKey = [[self.bookTitles allKeys] objectAtIndex:indexPath.row];
destViewController.bookTitleValue = [[self.bookTitles allValues] objectAtIndex:indexPath.row];
//destViewController.recipeName = [recipes objectAtIndex:indexPath.row];
}
}
@end
上記のコードを使用すると、次の 2 つの問題があります。
リストは、plist から読み取った後に順番に表示されません。たとえば、タイトル「どうしたらうまくいかないのか」は、4 番目にリストされていることを知って、1 番目のリストに表示されます。
次のような例外が発生します。
-[UINavigationController setBookTitleValue:]: 認識されないセレクターがインスタンス 0x894c230 に送信されました
これは次の行を指しています:
destViewController.bookTitleKey = [[self.bookTitles allKeys] objectAtIndex:indexPath.row];
destViewController.bookTitleValue = [[self.bookTitles allValues] objectAtIndex:indexPath.row];
(prepareForSegue 関数内)。
この問題を解決するのを手伝ってください。ありがとうございます!