Objective c 启动时未填充绑定的tableview
我从今天开始学习cocoa绑定,并成功地使其工作,只有一个例外。也就是说,当我在启动时填充绑定数组时,tableview不会反映此数据,直到我从UI中添加一个新条目,此时它将显示数组中的其余数据 填充绑定到的数组后,是否需要添加一些代码来“刷新”tableview 编辑:这是我的加载方法,名为fromObjective c 启动时未填充绑定的tableview,objective-c,nstableview,cocoa-bindings,Objective C,Nstableview,Cocoa Bindings,我从今天开始学习cocoa绑定,并成功地使其工作,只有一个例外。也就是说,当我在启动时填充绑定数组时,tableview不会反映此数据,直到我从UI中添加一个新条目,此时它将显示数组中的其余数据 填充绑定到的数组后,是否需要添加一些代码来“刷新”tableview 编辑:这是我的加载方法,名为fromawakeFromNib: - (void)load { NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefa
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的委托方法,如:
定义了tableView中的节数(现在只需返回1)-(NSInteger)numberOfSectionsInTableView:(UITableView*)tableView
(-(NSInteger)tableView:(UITableView*)tableView numberofrowsinssection:(NSInteger)节应返回数据源数组计数的
)返回[self.mySource count]
,它将退出队列/创建要显示到myTableView中的单元格-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
- 加载UI视图后,调用表视图的方法
(注意:我建议您至少在[self.myTableView reloadData]
中调用它,以确保它将真正执行,或者在按下视图中的按钮后)-(void)viewdide:(BOOL)animated
[self.myTableView reloadData]
希望有帮助 基本上,表视图要遵循的常见步骤是:
- 将tableview放入视图控制器(通过xib或编程方式) 和视图控制器的引用插座(例如:称之为myTableView)
- 将委托和数据源绑定到视图控制器(通过xib或编程方式)
(视图控制器中的代理是
,UITableViewDataSource
)UITableViewDelegate
- 保留一个数组(可能作为视图控制器的属性,让我们假设将其命名为
)并填充一些对象 (例如:如果尚未填充,可以在您的NSMutableArray*mySource
中完成此操作)viewDidLoad
- 实现tableview的委托方法,如:
定义了tableView中的节数(现在只需返回1)-(NSInteger)numberOfSectionsInTableView:(UITableView*)tableView
(-(NSInteger)tableView:(UITableView*)tableView numberofrowsinssection:(NSInteger)节应返回数据源数组计数的
)返回[self.mySource count]
,它将退出队列/创建要显示到myTableView中的单元格-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
- 加载UI视图后,调用表视图的方法
(注意:我建议您至少在[self.myTableView reloadData]
中调用它,以确保它将真正执行,或者在按下视图中的按钮后)-(void)viewdide:(BOOL)animated
[self.myTableView reloadData]
希望有帮助 在启动时如何准确填充绑定数组?您使用NSArray还是NSMutableArray?我不知道您的问题是什么,但绑定未更新的可能原因是:
- 直接设置实例变量,不通过属性设置李>
- 正在修改NSMutableArray状态。例如,
不会更新绑定到mutableArrayProperty的绑定[self.mutableArrayProperty addObject:@“Value”]
绑定依赖于键值观察,当某些值设置为绑定属性时,而不是当绑定属性对象返回的值更改其状态时,绑定将被更新。如何在启动时填充绑定数组?您使用NSArray还是NSMutableArray?我不知道您的问题是什么,但绑定未更新的可能原因是:
- 直接设置实例变量,不通过属性设置李>
- 正在修改NSMutableArray状态。例如,
不会更新绑定到mutableArrayProperty的绑定[self.mutableArrayProperty addObject:@“Value”]
绑定依赖于键值观察,当某些值被设置为绑定属性时,而不是当绑定属性对象返回的值更改其状态时,绑定会被更新。在启动时填充表的一种方法是从
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];