问题描述
|
我已经阅读了其他一些文章,但没有找到适合我的情况的正确解决方案。我有一个从主要App Delegate实例化的UITableViewController类,它控制其他视图,这些视图被推入从App Delegate创建的UINavigationController实例中。
在UINavigationToolBar上,我有一个UISegmentedControl按钮,该按钮分为两部分,即工厂负载和用户负载。我有一个动作方法附加到SegmentedControl上,以检测何时按下按钮,并且该方法位于UIViewController类内。我的目标是让视图重新加载由应用程序捆绑包中的plist文件构造的新词典的内容。我已经加载了字典,并且要显示的键设置为相应的数据格式,但是当我尝试重新加载UITableView时,它崩溃了。
这是我尝试在action方法中使用的最后一个代码,但仍然无法正常工作。
- (void) action:(id)sender {
UISegmentedControl *segment = (UISegmentedControl *) sender;
if ([segment selectedSegmentIndex] == 1)
{
NSLog(@\"User Load Selected\");
Nsstring *userLoadFilePath = [[NSBundle mainBundle] pathForResource:@\"UserLoads\" ofType:@\"plist\"];
NSDictionary *userLoadDictionary = [[NSDictionary alloc] initWithContentsOfFile:userLoadFilePath];
NSArray *allKeys = [userLoadDictionary allKeys];
keys = allKeys;
dictionary = userLoadDictionary;
[[self tableView] reloadData];
}
else if ([segment selectedSegmentIndex] == 0)
{
NSLog(@\"Factory Load Selected\");
Nsstring *factoryLoadFilePath = [[NSBundle mainBundle] pathForResource:@\"AlliantPowder\" ofType:@\"plist\"];
NSDictionary *factoryLoadDictionary = [[NSDictionary alloc] initWithContentsOfFile:factoryLoadFilePath];
NSArray *allKeys = [factoryLoadDictionary allKeys];
keys = allKeys;
[[self tableView] reloadData];
}
}
我正在调用ѭ1,以尝试检索UIViewController中包含的实际表以尝试重新加载该表,但是没有运气。感谢您的帮助,如果需要更多代码,请询问。谢谢!
安德鲁
-------编辑-----------
这是参考Chip思想的新代码。该问题仍未解决,应用仍然崩溃。
- (void) action:(id)sender {
// Create an instance of UISegmentedControl and set it as the sending event.
UISegmentedControl *segment = (UISegmentedControl *) sender;
// Detect which button was pressed and load a new dictionary appropriately
// Checking if userLoads was selected
if ([segment selectedSegmentIndex] == 1)
{
NSLog(@\"User Load Selected\");
keys = userKeys;
[[self tableView] reloadData];
}
// Checking if factoryLoads was selected
else if ([segment selectedSegmentIndex] == 0)
{
NSLog(@\"Factory Load Selected\");
keys = [dictionary allKeys];
[[self tableView] reloadData];
}
[segment release];
}
解决方法
我将预加载字典并将其作为ivars保留在控制器类中。
我敢打赌,字典内容的加载尚未完成,因此您实际上是在数据更改时调用reloadData,这导致了崩溃。
同样,读取是一个昂贵的选项,每次segementControl更改状态时您都在加载。