1

同様の質問をたくさん検索して調べましたが、まだ答えが見つかりません。別のインスタンスを初期化せずに別のクラスを参照するにはどうすればよいですか? 別のクラスから「reloadData」を呼び出して、MOC のデータを反映するにはどうすればよいですか。NSNotification で確認したところ、MOC は保存されているようです。

ポップオーバー クラス:

-(void)actionSave:(id)sender {
     MainContent *entityContent =
         [NSEntityDescription insertNewObjectForEntityForName:@"MainContent"
              inManagedObjectContext:self.mDoc.managedObjectContext];
     entityContent.date = [NSDate date];
     entityContent.title = self.titleName.text;

     //Main Question: How do I call the ViewController's function that is in a separate class?
     [ViewController reloadTableView]; //???

     //Separate Question: How do I dismiss this popover from inside of this function?
}

ViewController クラス:

-(void)setupTable {
    self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(gridV1, 140, column1_width, 768-170) style:UITableViewStylePlain];
    [self.tableView setBackgroundColor:[UIColor clearColor]];

    self.tableView.autoresizesSubviews = YES;

    self.tableView.delegate = self.tableViewController;
    self.tableView.dataSource = self.tableViewController;
    [self.view addSubview:self.tableView];
}
-(void)reloadTableView{
    [self.tableView reloadData];
}

TableViewController クラス: (self.tableView のデリゲートとデータソース)

- (void)setupFetchedResultsController
{
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"MainContent"];

    // I want to sort them by the "date" attribute input by [NSDate date].
    request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"date" ascending:YES]];

    // no predicate because we want ALL of the data in the "MainContent" entity.

    self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request                                                                
        managedObjectContext:self.mDoc.managedObjectContext sectionNameKeyPath:nil cacheName:nil];
}
- (void)setMDoc:(UIManagedDocument *)mDoc {
    if (_mDoc != mDoc) _mDoc = mDoc;
}
- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    if (!self.mDoc) {
        [[globalMDoc sharedDocumentHandler] performWithDocument:^(UIManagedDocument *coreDatabase) {
            self.mDoc = coreDatabase;
            [self setupFetchedResultsController];
        }];
    }
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Overview Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    }
    MainContent *content = [self.fetchedResultsController objectAtIndexPath:indexPath];
    cell.textLabel.text = content.title;
    cell.detailTextLabel.text = [NSString stringWithFormat:@"%d", [content date]];

    return cell;
}
4

2 に答える 2

1

個人的にはNSNotifcationsを使用しており、非同期で発生するイベントがいくつかあり、通知をポストバックしています。

つまり、私がしているのは、バックグラウンドスレッドに画像をダウンロードし、終了したらテーブルをリロードすることです。これを行うには、tableviewclassに通知を送信すると、テーブルビュークラスが独自のテーブルビューを再読み込みします。

〜ダン

于 2012-06-27T01:51:29.250 に答える
1

さて、このリンクの例のようなシングルトンを作成してください: http://www.galloway.me.uk/tutorials/singleton-classes/

次に、UITableView が含まれている UIViewController のシングルトンで ivar を作成します。次に、UITableView ビューの VDL で、次のようにします。

[Singleton sharedSingleton].theViewController = self;

次に、他のビューで次のようなことを行います

    Singleton *singleton = [Singleton sharedSingleton];
    [singleton.mytableview reloadData];

ただし、(= self) 行については、アクセスしようとしたときに theViewController 変数が nil にならないように、applicationDidFinishLaunching のように、どこか前に実行することをお勧めします。

于 2012-06-27T04:09:22.787 に答える