我的plist更新后,尝试重新加载UItableview?

时间:2012-12-18 01:28:52

标签: iphone objective-c xcode plist

我的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];

}

提前致谢!

4 个答案:

答案 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];
}