我的app中有一个由用户填充的plist。我试图在UITableView中显示该plist的内容,直到应用程序重新启动后才会显示,这意味着它不会更新。这就是我所拥有的:
- (void)viewDidLoad
{
[super viewDidLoad];
// Uncomment the following line to preserve selection between presentations.
// self.clearsSelectionOnViewWillAppear = NO;
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
NSString *path = [[NSBundle mainBundle] pathForResource:@"foodList" ofType:@"plist"];
arrayFood = [[NSMutableArray alloc]initWithContentsOfFile:path];
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.tableView reloadData];
NSString *path = [[NSBundle mainBundle] pathForResource:@"foodList" ofType:@"plist"];
arrayFood = [[NSMutableArray alloc]initWithContentsOfFile:path];
}
提前致谢!
答案 0 :(得分:0)
从我看到的,你应该打电话
[self.tableView reloadData]
将数据从plist加载到viewDidAppear中的foodArray ...
答案 1 :(得分:0)
每当更新pList文件时,只需调用self.tableView reloadData即可。此外,请确保更新您用于UITableView的数据源。此数据源可以是NSDictionary,NSArray,NSMutableArray等.tableView的reloadData方法将触发cellforRowIndexPath方法,您将在其中创建UITableViewCell。
答案 2 :(得分:0)
使用最新数据更新UITableView的最佳方法是覆盖数据数组的setter方法。 例如,您的数据数组是arrayFood,因此您可以将其属性设置为strong或者说保留
@property(nonanatomic,stron) NSMutableArray *arrayFood;
然后你应该覆盖它的setter方法。
-(NSMutableArray *)setArrayFood:(NSMutableArray *)array
{
//set your data array here and simply call reloadData
[self.tableView reloadData];
}
这样,只要数据数组发生变化,你的tableView就会一直得到更新。
还可以使用NSNotifications更改plist并在那里更新您的arrayFood。
答案 3 :(得分:0)
使用NSNotificationCenter可以为您提供帮助。
在更新plist的ViewController中,在发生此更新时放置此代码:
[[NSNotificationCenter defaultCenter] postNotificationName:@"plistDidUpdate" object:self];
在ViewController中,您需要将此代码添加到viewDidLoad:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(plistDidUpdate:) name:@"plistDidUpdate" object:nil];
另外,在同一个ViewController中添加此函数:
-(void)plistDidUpdate:(id)sender{
[self.tableView reloadData];
}