0

とてもシンプルなアプリを作って絵コンテの使い方を学んでいます。メインのViewController(InfoViewController)には、次の名前のtextFieldがありますnameField。このフィールドにテキストを入力した後、saveボタンを入力すると、テキストが配列(list)(で宣言されてTableViewControllerいる)に追加され、のテーブルに表示されるはずTableViewControllerです。

また、セグエ識別子は次のとおりGoToTableViewControllerです。

ただし、テキストは(配列)nameFieldに渡されません。list最初は、textFieldを間違えていると思いました。そこで、静的なテキストに置き換えました。しかし、それも役に立ちませんでした。次に、NSLog()を使用して文字列が配列に追加されているかどうかを確認しましたが、取得するたびにNull。私の理解では、list(配列)TableViewControllerはロードされるまで作成されません。そのため、私allocinit listInfoViewControllerで。しかし、それは役に立ちません。

誰かが私が犯している間違いを見つけるのを手伝ってくれませんか?

ありがとう!

私のコードの関連セクションは次のとおりです。

InfoViewController.h

#import <UIKit/UIKit.h>

@class TableViewController;

@interface InfoViewController : UIViewController

@property (weak, nonatomic) IBOutlet UITextField *nameField;
@property (strong, nonatomic) TableViewController *tableViewController;
@end

InfoViewController.m

#import "InfoViewController.h"
#import "TableViewController.h"

@implementation InfoViewController

@synthesize nameField;
@synthesize tableViewController;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    tableViewController = [[TableViewController alloc] init];
    tableViewController.list = [[NSMutableArray alloc] init];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if([segue.identifier isEqual:@"GoToTableViewController"])
    {
        /* Pass data to list and then reloadTable data */

        tableViewController = segue.destinationViewController;
        tableViewController.infoViewController = self;

// (*)      [tableViewController.list addObject:nameField.text];
// (*)      [tableViewController.list addObject:@"Hi!"];

        [tableViewController.list insertObject:@"Hi" atIndex:0];
// (**)      NSLog(@"%@", [tableViewController.list objectAtIndex:0]);
        [tableViewController.tableView reloadData];

    }
}

@end

(*)これらのステートメントを挿入して、nameFieldの値の使用を間違えていないかどうかを確認しました。(**)このステートメントは、配列に挿入された値をチェックするためのものです。

TableViewController.h

#import <UIKit/UIKit.h>

@class InfoViewController;

@interface TableViewController : UITableViewController

@property (nonatomic, strong) NSMutableArray *list;
@property (strong, nonatomic) InfoViewController *infoViewController;

@end

TableViewController.m

#import "TableViewController.h"
#import "InfoViewController.h"

@implementation TableViewController

@synthesize list;
@synthesize infoViewController;

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.navigationItem.rightBarButtonItem = self.editButtonItem;
    list = [[NSMutableArray alloc] init];
}


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{ return 1; }

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{ return list.count; }

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    cell.textLabel.text = [list objectAtIndex:indexPath.row];

    return cell;
}

@end
4

1 に答える 1

0

viewWillAppearのメソッドでテーブルをリロードしますtableViewController:

[tableViewController.tableView reloadData];
于 2012-11-01T23:34:52.717 に答える