Думал, что я был на рулоне, а затем снова упал на лицо.UITableView blank
После ввода моего кода для сортировки данных plist в разделы мое табличное представление показывает пробел. Заметим, что я повторно подключил dataSource и делегировать, и знаю, что prepareForSegue не прав - после того, как у меня появятся ячейки, которые я обновляю (работал без разделов). Это, очевидно, я, но я не вижу ошибки, и она прекрасно строится.
Пс: Я знаю, что он не оптимизирован для управления памятью. Как только tableview будет работать, я буду объявлять свойство ключей и сортировать их в это и т. Д. Кроме того, причина, по которой нет инструкций NSLog, заключается в том, что мой XCODE ничего не выводит на консоль.
Благодаря
#import "RCViewController.h"
#import "detailView.h"
@interface RCViewController()
@end
@implementation RCViewController
@synthesize orderedPlistWords, tableView;
@synthesize alphabeticallySortedWords;
static NSString *CellIdentifier = @"Cell Identifier";
-(NSDictionary *)alphabeticallySortedWords:(NSArray *)wordsArray {
NSMutableDictionary *buffer = [[NSMutableDictionary alloc]init];
for (NSDictionary *dict in orderedPlistWords) {
NSString *word = [dict objectForKey:@"Word"];
NSString *firstLetter = [[word substringToIndex:1]uppercaseString];
if ([buffer objectForKey:firstLetter]) {
[(NSMutableArray *)[buffer objectForKey:firstLetter]addObject:dict];
}
else {
NSMutableArray *mutableArray = [[NSMutableArray alloc]initWithObjects:dict, nil];
[buffer setObject:mutableArray forKey:firstLetter];
}
}
NSArray *keys = [buffer allKeys];
for (int j; j<keys.count; j++) {
NSString *key = [keys objectAtIndex:j];
[(NSMutableArray *)[buffer objectForKey:key]sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
}
NSDictionary *result = [NSDictionary dictionaryWithDictionary:buffer];
return result;
}
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
NSArray *keys = [self.alphabeticallySortedWords allKeys];
return [keys count];
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
NSArray *unsortedKeys = [self.alphabeticallySortedWords allKeys];
NSArray *sortedKeys = [unsortedKeys sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
NSString *key = [sortedKeys objectAtIndex:[indexPath section]];
NSArray *wordsForSection = [[self.alphabeticallySortedWords objectForKey:key]objectForKey:@"Word"];
NSString *word = [wordsForSection objectAtIndex:[indexPath row]];
[cell.textLabel setText:word];
return cell;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSArray *unsortedKeys = [self.alphabeticallySortedWords allKeys];
NSArray *sortedKeys = [unsortedKeys sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
NSString *key = [sortedKeys objectAtIndex:section];
NSArray *wordsForSection = [[self.alphabeticallySortedWords objectForKey:key]objectForKey:@"Word"];
return [wordsForSection count];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
[self performSegueWithIdentifier:@"showDetail" sender:cell];
}
-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
NSArray *keys = [[self.alphabeticallySortedWords allKeys]sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
NSString *key = [keys objectAtIndex:section];
return key;
}
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if ([segue.identifier isEqualToString:@"showDetail"]) {
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
detailView *destViewController = segue.destinationViewController;
destViewController.word = [[self.orderedPlistWords objectAtIndex:indexPath.row]valueForKey:@"Word"];
destViewController.definition = [[self.orderedPlistWords objectAtIndex:indexPath.row]valueForKey:@"Definition"];
}
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSString *plistPath = [[NSBundle mainBundle]pathForResource:@"words" ofType:@"plist"];
NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"Word" ascending:YES selector:@selector(caseInsensitiveCompare:)];
NSMutableArray *plistWords = [[NSMutableArray alloc]initWithContentsOfFile:plistPath];
self.orderedPlistWords = [plistWords sortedArrayUsingDescriptors:[NSArray arrayWithObject:descriptor]];
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:CellIdentifier];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<dict>
<key>Word</key>
<string>Pitch</string>
<key>Definition</key>
<string>Ground players play on</string>
</dict>
<dict>
<key>Word</key>
<string>Goal</string>
<key>Definition</key>
<string>Point awarded when ball crosses goal line</string>
</dict>
<dict>
<key>Word</key>
<string>Yellow Card</string>
<key>Definition</key>
<string>Penalise player for foul</string>
</dict>
</array>
</plist>
Спасибо, что нашли время, чтобы ответить. Я удалил параметр и он запустил. Извините за мое невежество. – user3692490
Ну, у вас есть метод, который вы написали, который строит эту структуру, 'alphabeticallySortedWords:', поэтому (а) вызовите эту процедуру после завершения чтения plist; и (б) изменить эту процедуру, чтобы фактически сохранить результаты в свой аналогичный именованный объект. Честно говоря, я также изменил бы название этого метода, чтобы устранить любую путаницу между свойством и методом, который создает это свойство. – Rob
Удалив параметр из метода, приложение работает как запланировано. Однако, чтобы сделать это, это неправильно - следует ли мне вызвать метод в viewdidload? Прошу прощения, если я waffling - я очень ценю помощь ☺ – user3692490