通知を受け取り、配列に値を設定するビュー コントローラーがあります。これは、テーブルビューに表示されます。問題は、テーブルビューに最後に追加されたオブジェクトしか表示されないことです。その後、新しいビューにプッシュして再び戻ってくると、配列全体がテーブルに表示されます。おそらく、viewDidLoad の後に receiveNotification メソッドが呼び出されていると思いますが、これは理にかなっています。[myTableView reloadData] を使用してデータをリロードしようとしました。うまくいきませんでした。セレクターと、遅延のあるセレクターも試しました。
誰かがこれを試して成功しましたか?もしそうなら、どうすればいいのか教えていただけますか? これを読んでくれてありがとう。
編集: - このコードがゴミでいっぱいであることはわかっています。最近アプリを大幅に変更しただけで、整理する前にこの最後のビットに取り組んでいます! :)
-(void)receiveNotification:(NSNotification *)notification
{
if (!path) {
path = [[NSBundle mainBundle] pathForResource:@"OverallDictionary" ofType:@"plist"];
theDictionary = [[NSDictionary alloc] initWithContentsOfFile:path];
}
NSArray *temporaryArray = [theDictionary allKeys];
for (id key in temporaryArray) {
if ([[notification name] isEqualToString:key]) {
if (!allCompletedTopics) {
allCompletedTopics = [[NSMutableArray alloc] init];
}
if (![allCompletedTopics containsObject:[[theDictionary valueForKey:key] valueForKey:@"Title"]]) {
[allCompletedTopics addObject:[[theDictionary valueForKey:key] valueForKey:@"Title"]];
defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:allCompletedTopics forKey:@"hi"];
theFinalScore++;
[[NSUserDefaults standardUserDefaults] setInteger:theFinalScore forKey:@"theFinalScore"];
[self updateTheProgressView];
}
}
}
NSLog(@"received %@", allCompletedTopics);
[[NSNotificationCenter defaultCenter] postNotificationName:@"reloadTheTable" object:nil];
}
- (void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadTable:) name:@"reloadTheTable" object:nil];
// Do any additional setup after loading the view.
allCompletedTopics = [[[NSUserDefaults standardUserDefaults] objectForKey:@"hi"] mutableCopy];
[defaults setObject:allCompletedTopics forKey:@"theKey"];
if (!path) {
path = [[NSBundle mainBundle] pathForResource:@"OverallDictionary" ofType:@"plist"];
theDictionary = [[NSDictionary alloc] initWithContentsOfFile:path];
// NSLog(@"Created on view did load");
}
NSString *path1 = [[NSBundle mainBundle] pathForResource:@"Keys" ofType:@"plist"];
NSArray *theKeys = [[NSArray alloc] initWithContentsOfFile:path1];
for (NSString *theString in theKeys) {
// NSLog(@"%@", theString);
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveNotification:) name:theString object:nil];
}
theFinalScore = [[NSUserDefaults standardUserDefaults] integerForKey:@"theFinalScore"];
[self updateTheProgressView];
NSLog(@"%@", allCompletedTopics);
// [myTableView reloadData];
}
- (void)reloadTable:(NSNotification *)notification
{
[myTableView reloadData];
NSLog(@"hi");
}
-(void)createTheData {
if (!levelThree) {
levelThree = [[NSMutableArray alloc] init];
}
levelThreeFinal = [[NSMutableArray alloc] initWithCapacity:48];
for (NSString *object in allCompletedTopics) {
if (([object rangeOfString:@"level 3"].location != NSNotFound) && (![levelThree containsObject:object]))
{
// NSLog(@"%@", object);
[levelThree addObject:object];
NSString *theTemp = [object substringToIndex:object.length - 8];
[levelThreeFinal addObject:theTemp];
}
levelThreeDict = [NSDictionary dictionaryWithObject:levelThreeFinal forKey:@"Levels"];
}
allLevels = [[NSMutableArray alloc] initWithObjects:levelThreeDict,
//levelFourDict,
//levelFiveDict,
//levelSixDict,
nil];
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [[[allLevels objectAtIndex:section] objectForKey:@"Levels"] count]; //リターン 2; }
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return allLevels.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(!cell)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
// Configure the cell...
// cell.textLabel.text = [allCompletedTopics objectAtIndex:indexPath.row];
NSDictionary *dictionary = [allLevels objectAtIndex:indexPath.section];
NSArray *array = [dictionary objectForKey:@"Levels"];
NSString *cellValue = [array objectAtIndex:indexPath.row];
cell.textLabel.text = cellValue;
return cell;
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
NSString *theTitle = [[NSString alloc] init];
switch (section) {
case 0:
theTitle = @"Level 3";
break;
case 1:
theTitle = @"Level 4";
break;
case 2:
theTitle = @"Level 5";
break;
case 3:
theTitle = @"Level 6";
break;
default:
break;
}
//return theTitle;
return @"Your progress so far!";
}