ios - 未调用 cellForRowAtIndexPath

标签 ios uitableview nsmutablearray

我在两个 View 之间沟通时遇到了麻烦。我的目标是向我的 NSMutableArray 添加一个新对象.感谢 stackoverflow 上可爱的人,他们已经修复了。现在我有另一个问题。
即使我能够将对象添加到我的 NSMutableArray ,表不会更新自身以使用新数据重新填充。这是一些代码:

第一 View Controller .h

@interface FirstViewController : UIViewController <UITableViewDelegate,UITableViewDataSource>{  
    IBOutlet UITableView *mytableview;  
    NSMutableArray *mytableinfo;  
@property (nonatomic,retain) IBOutlet UITableView *mytableview;  
@property (nonatomic,retain) NSMutableArray *mytableinfo;`

第一 View Controller .m
-(IBAction)addShift:(id)sender{
    SecondViewController *secondViewController = [[SecondViewController alloc]init];
    [self presentModalViewController:secondViewController animated:YES];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
    return [mytableinfo count];
}

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }
    // Configure the cell...
    cell.textLabel.text =[mytableinfo objectAtIndex:indexPath.row];
    NSLog(@"Data was written to table");
    return cell;
}
-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    mytableinfo = [[NSMutableArray alloc]init];
    mytableview = [[UITableView alloc]init];
    [mytableinfo addObject:@"Hello world1"];
    [self.mytableview reloadData];
}
- (void)viewDidLoad
{
    UIBarButtonItem *addButton = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addShift:)];
    self.navigationItem.rightBarButtonItem = addButton;    
    [super viewDidLoad]; 
    UIBarButtonItem *refresh = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(reloadTableData:)];
    self.navigationItem.leftBarButtonItem = refresh;
    mytableinfo = [[NSMutableArray alloc]init];
    [mytableinfo addObject:@"First Shift"];
    [self.mytableview reloadData];
    // Do any additional setup after loading the view from its nib.
}

第二 View Controller .m
#import "SecondViewController.h"
#import "FirstViewController.h"

-(IBAction)saveShift:(id)sender{
    FirstViewController *firstViewController = [[FirstViewController alloc]init];
    firstViewController.mytableinfo = [[NSMutableArray alloc]init];
    [firstViewController.mytableinfo addObject:@"SecondViwController Dismissed"];
    NSLog(@"%@",[firstViewController.mytableinfo objectAtIndex:0]);
    [self dismissModalViewControllerAnimated:YES];
}

所以当saveShift被称为我应该被带回主视图 - 我这样做 - 然后重新填充我的 tableview .就好像我摆脱了一个小问题却跳入了另一个问题——感觉不是很好!
干杯,
山姆

最佳答案

在您的 saveShift:(id)sender方法你有很多代码。
只需执行以下操作:

[self.myTableInfo addObject:@"SecondViewConroller dimissed"];
[self dismissModalViewControllerAnimated:YES];

在该代码中,我假设您已经在 secondView 中传递了对 NSMutableArray 的引用。

我记得您来自 NSMutableArray 的帖子,并且您正在展示来自 FirstView 的 SecondView(如果我的内存很好的话)。
但是在您的代码中,在 saveShift在第二个 View 中,您目前正在创建 brand new FirstView,这与您来自哪里不同。因此,当您关闭模态视图时,您的“全新”firstView 会丢失并且您会回到原来的 firstView。最后一个还没有听说过你的对象。

你好山姆,
去看看我在你的 NSMutableArray 线程中给你的最后一个答案,那里几乎有你需要解决的一切。

好的,这里有更多的快速修复,以便可以工作
//  SecondViewController.m
#import "SecondViewController.h"
#import "FirstViewController.h"
@implementation SecondViewController
@synthesize dateformatter,mydatepicker,startingTime;
//  HERE Add a new property that match this and a variable in the .h
@synthesize array4Test;
//   HERE make an init that will make this UIViewController know about your NSMutableArray
- (id)initWithMutableArray:aMutableArray
{
self = [self initWithNibName:nil bundle:nil];
if (self)
{
    self.array4Test = aMutableArray;
}
return  self;
}
- (void)dealloc 
{    
//  HERE clean up
self.array4Test = nil;
[super dealloc];
}
-(IBAction)saveShift:(id)sender{
//    HERE remove this code
//FirstViewController *firstViewController = [[FirstViewController alloc]init];
//[firstViewController.mytableinfo addObject:@"Hello world"];
//NSLog(@"%@",[firstViewController.mytableinfo objectAtIndex:0]);
//    HERE add an object to the mutableArray that is store in your firstViewController, the one you've passed the reference in
[self.array4Test addObject:@"This is a String"];
[self dismissModalViewControllerAnimated:YES];
}

我想我刚刚在这个中添加了一个 NSLog() 。
//  FirstViewController.m
#import "FirstViewController.h"
#import "SecondViewController.h"

@implementation FirstViewController
@synthesize mytableinfo,mytableview;
@synthesize goneToOtherView;
-(IBAction)addShift:(id)sender{
SecondViewController *secondViewController = [[SecondViewController alloc] initWithMutableArray:self.mytableinfo];
[self presentModalViewController:secondViewController animated:YES];
}
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[self.mytableview reloadData];
NSString *aString = [mytableinfo lastObject];
if (aString)
{
    NSLog(@"This just came back from the second View\n%@", aString);
}
}

关于ios - 未调用 cellForRowAtIndexPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8029509/

相关文章:

ios - 如何优化drawRect?

ios - iOS 上的 Safari 不适用于媒体查询

cocoa-touch - 如何从 UITableView 中取消选择一个对象?

ios - 为什么NSMutableSet可以添加的对象多于容量

ios - Xcode 7 是否支持 iOS 8.0 模拟器?

iOS titleForHeaderInSection 崩溃

ios - 使用部分类别填充表格 View

ios - 无法从我的 for 循环中向 NSmutableArray 添加超过 260 个元素的元素

ios - UIBezierPath 撤消绘图重绘 UIImageView 的图像

ios - 在 NSUserDefaults 错误中存储 Int 和 Array 的字典