我有一个指向视图的按钮,每当我看到按下按钮时我的应用程序崩溃了。谁能告诉我为什么?代码是按钮推送到的视图的实现文件。
@implementation OpenShiftViewController
-(void)viewDidLoad
{
[super viewDidLoad];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
myDictionary = [defaults dictionaryRepresentation];
}
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return myDictionary.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"cell";
UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
NSArray * allKeys = [myDictionary allKeys];
cell.textLabel.text = [myDictionary objectForKey:[allKeys objectAtIndex:indexPath.row]];
cell.detailTextLabel.text = [myDictionary objectForKey:[allKeys objectAtIndex:indexPath.row]];
return cell;
}
@end
答案 0 :(得分:1)
- (void)viewDidLoad
{
[super viewDidLoad];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
myDictionary = [defaults dictionaryRepresentation];
myMutableArray = [[NSMutableArray alloc]init];
[self storingObjectsFromDictionaryToArray];
// Do any additional setup after loading the view, typically from a nib.
}
-(void)storingObjectsFromDictionaryToArray
{
NSArray *arr = [myDictionary allKeys];
[myMutableArray addObjectsFromArray:[myDictionary valueForKey:[arr objectAtIndex:0]]];
NSString *str = [NSString stringWithFormat:@"%@",[myDictionary valueForKey:[arr objectAtIndex:1]]];
[myMutableArray addObject:str];
str = [NSString stringWithFormat:@"%@",[myDictionary valueForKey:[arr objectAtIndex:2]]];
[myMutableArray addObject:str];
[myMutableArray addObjectsFromArray:[myDictionary valueForKey:[arr objectAtIndex:3]]];
[myMutableArray addObject:[myDictionary valueForKey:[arr objectAtIndex:4]]];
[myMutableArray addObjectsFromArray:[myDictionary valueForKey:[arr objectAtIndex:5]]];
[myMutableArray addObjectsFromArray:[myDictionary valueForKey:[arr objectAtIndex:6]]];
[myMutableArray addObject:[myDictionary valueForKey:[arr objectAtIndex:7]]];
}
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return myMutableArray.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (!cell) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
cell.textLabel.text = [myMutableArray objectAtIndex:indexPath.row];
cell.detailTextLabel.text = [myMutableArray objectAtIndex:indexPath.row];
return cell;
}
答案 1 :(得分:0)
错误是线程1:断点9.1
啊......你可能有一个断点被激活了吗?
答案 2 :(得分:0)
您没有收到错误 - 这只是因为您有一个激活的断点。
如果你正在使用Xcode 4,那么你可以看到'Breakpoints',如下所示。只需单击它即可禁用断点。
如果您使用的是Xcode 5,则必须单击此蓝色按钮以禁用断点。
答案 3 :(得分:0)
正如AlexVogel在评论中指出的那样,使用init方法来初始化字典。 或者,您可以使用属性延迟加载:
- (NSDictionary *)myLoadedDictionary{
if (!myDictionary) {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
myDictionary = [defaults dictionaryRepresentation];
}
return myDictionary;
}
现在,在你的班级中,使用[self myLoadedDictionary]而不是myDictionary。
我不在我的机器上,但我非常确定您甚至可以将myDictionary定义为getter,这样您就可以在代码中使用相同的名称而不是myLoadedDictionary。
答案 4 :(得分:0)
像其他人一样,我想指出应该发布你的错误。
现在我也看到了cellAtindexPath逻辑的一个问题。您尝试在空单元格上设置数据,请参阅[tableView dequeueReusableCellWithIdentifier:CellIdentifier];如果你已经给它一些东西,它只会给你一些东西。
你有两个加载单元格的方法,新的方式或旧的方式,两者都有点相同。
选项一,我推荐这个:
[self.tableview registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"];
在CellForIndexPath中获取单元格:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
forIndexPath在这里很重要,使用旧的api将返回一个nil单元格。
选项2:
加载一个单元格,如果没有,则创建一个单元格。
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cell"];
}