Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 启动时未填充绑定的tableview_Objective C_Nstableview_Cocoa Bindings - Fatal编程技术网

Objective c 启动时未填充绑定的tableview

Objective c 启动时未填充绑定的tableview,objective-c,nstableview,cocoa-bindings,Objective C,Nstableview,Cocoa Bindings,我从今天开始学习cocoa绑定,并成功地使其工作,只有一个例外。也就是说,当我在启动时填充绑定数组时,tableview不会反映此数据,直到我从UI中添加一个新条目,此时它将显示数组中的其余数据 填充绑定到的数组后,是否需要添加一些代码来“刷新”tableview 编辑:这是我的加载方法,名为fromawakeFromNib: - (void)load { NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefa

我从今天开始学习cocoa绑定,并成功地使其工作,只有一个例外。也就是说,当我在启动时填充绑定数组时,tableview不会反映此数据,直到我从UI中添加一个新条目,此时它将显示数组中的其余数据

填充绑定到的数组后,是否需要添加一些代码来“刷新”tableview

编辑:这是我的加载方法,名为from
awakeFromNib

- (void)load
{
    NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
    NSData *savedArray = [currentDefaults objectForKey:@"components"];
    if (savedArray != nil)
    {
        NSArray *oldArray = [NSKeyedUnarchiver unarchiveObjectWithData:savedArray];
        if (oldArray != nil) {
            _components = [[NSMutableArray alloc] initWithArray:oldArray];
        } else {
            _components = [[NSMutableArray alloc] init];
        }
    }
}

其中
\u组件
NSTableView的绑定源

基本上,表视图的常见步骤如下:

  • 将tableview放入视图控制器(通过xib或编程方式) 和视图控制器的引用插座(例如:称之为myTableView)

  • 将委托和数据源绑定到视图控制器(通过xib或编程方式)
    (视图控制器中的代理是
    UITableViewDataSource
    UITableViewDelegate

  • 保留一个数组(可能作为视图控制器的属性,让我们假设将其命名为
    NSMutableArray*mySource
    )并填充一些对象 (例如:如果尚未填充,可以在您的
    viewDidLoad
    中完成此操作)

  • 实现tableview的委托方法,如:

    • -(NSInteger)numberOfSectionsInTableView:(UITableView*)tableView
      定义了tableView中的节数(现在只需返回1)

    • -(NSInteger)tableView:(UITableView*)tableView numberofrowsinssection:(NSInteger)节应返回数据源数组计数的
      返回[self.mySource count]

    • -(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
      ,它将退出队列/创建要显示到myTableView中的单元格

  • 加载UI视图后,调用表视图的方法
    [self.myTableView reloadData]
    (注意:我建议您至少在
    -(void)viewdide:(BOOL)animated
    中调用它,以确保它将真正执行,或者在按下视图中的按钮后)

然后,每次添加项目时,如果希望在tableview中显示更新的数据源,只需再次调用
[self.myTableView reloadData]


希望有帮助

基本上,表视图要遵循的常见步骤是:

  • 将tableview放入视图控制器(通过xib或编程方式) 和视图控制器的引用插座(例如:称之为myTableView)

  • 将委托和数据源绑定到视图控制器(通过xib或编程方式)
    (视图控制器中的代理是
    UITableViewDataSource
    UITableViewDelegate

  • 保留一个数组(可能作为视图控制器的属性,让我们假设将其命名为
    NSMutableArray*mySource
    )并填充一些对象 (例如:如果尚未填充,可以在您的
    viewDidLoad
    中完成此操作)

  • 实现tableview的委托方法,如:

    • -(NSInteger)numberOfSectionsInTableView:(UITableView*)tableView
      定义了tableView中的节数(现在只需返回1)

    • -(NSInteger)tableView:(UITableView*)tableView numberofrowsinssection:(NSInteger)节应返回数据源数组计数的
      返回[self.mySource count]

    • -(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
      ,它将退出队列/创建要显示到myTableView中的单元格

  • 加载UI视图后,调用表视图的方法
    [self.myTableView reloadData]
    (注意:我建议您至少在
    -(void)viewdide:(BOOL)animated
    中调用它,以确保它将真正执行,或者在按下视图中的按钮后)

然后,每次添加项目时,如果希望在tableview中显示更新的数据源,只需再次调用
[self.myTableView reloadData]


希望有帮助

在启动时如何准确填充绑定数组?您使用NSArray还是NSMutableArray?我不知道您的问题是什么,但绑定未更新的可能原因是:

  • 直接设置实例变量,不通过属性设置
  • 正在修改NSMutableArray状态。例如,
    [self.mutableArrayProperty addObject:@“Value”]
    不会更新绑定到mutableArrayProperty的绑定

绑定依赖于键值观察,当某些值设置为绑定属性时,而不是当绑定属性对象返回的值更改其状态时,绑定将被更新。

如何在启动时填充绑定数组?您使用NSArray还是NSMutableArray?我不知道您的问题是什么,但绑定未更新的可能原因是:

  • 直接设置实例变量,不通过属性设置
  • 正在修改NSMutableArray状态。例如,
    [self.mutableArrayProperty addObject:@“Value”]
    不会更新绑定到mutableArrayProperty的绑定

绑定依赖于键值观察,当某些值被设置为绑定属性时,而不是当绑定属性对象返回的值更改其状态时,绑定会被更新。

在启动时填充表的一种方法是从
init
方法中调用
load
,而不是等到
awakeFromNib
。例如:

- (id)init {
     if ((self = [super init])) {
         NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
         NSData *savedArray = [currentDefaults objectForKey:@"components"];
         if (savedArray != nil)
         {
             NSArray *oldArray = [NSKeyedUnarchiver unarchiveObjectWithData:savedArray];
             if (oldArray != nil) {
                _components = [[NSMutableArray alloc] initWithArray:oldArray];
             } else {
                _components = [[NSMutableArray alloc] init];
             }
         }
     }
     return self;
}
(注意,对于您正在使用的类,应该将其更改为指定的
init
方法)

现在发生的是,在调用
awakeFromNib
之前,正在创建
NSArrayController
,并且
 [[self mutableArrayValueForKey:@"components"] addObject:theObject];