为什么App崩溃从Dictionary获取数据?

时间:2012-03-21 13:00:21

标签: iphone objective-c crash nsdictionary

我正在开发一个应用程序,我必须在字典中保存一些数据,然后我必须加载该数据并向用户显示用户保存的选项。  当我从字典中获取数据时,它第二次崩溃而不是第一次崩溃并且每次都会给出不同的崩溃日志。 像

-[UIDeviceRGBColor objectAtIndex:]: unrecognized selector sent to instance 0x68c22d0

[UIControlTargetAction count]: unrecognized selector sent to instance 0x68683d0

   0 : <CFString 0x687cb30 [0x124eb38]>{contents = "dish1"} = UIDeviceWhiteColorSpace 0 0.5

我的代码就是这个

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (tableView == menuTableView) {

        [optionsView addSubview:topScrollView];
        optionFlag=NO;
        [self optionScreenMethod:indexPath.row];
        NSString *dishSelect=[NSString stringWithFormat:@"dish%d",indexPath.row];
        NSMutableArray *dishesArray=[[NSMutableArray alloc]init];
        NSMutableArray *dishDicArray=[[NSMutableArray alloc]init];
        dishesArray=[dishDictionary objectForKey:dishSelect];
        NSLog(@"%d",[dishesArray count]);
        if ([dishesArray count]>0) {
            optionFlag=YES;
        }else{
            for (int i=0; i<[tempStr intValue]; i++) {
                DishData *dishData=[[DishData alloc]init];
                dishData.dishTitle=(NSMutableString*)[[tableMenuArray objectAtIndex:indexPath.row] itemName];
                dishData.accompArrayIndex=nil;
                dishData.cookArrayIndex=nil;
                dishData.dishComent=nil;
                dishData.nonMandArray=nil;
                [dishDicArray addObject:dishData];
            }
            [dishDictionary setObject:dishDicArray forKey:dishSelect];
        }
        //[dishesArray release];
        //[dishDicArray release];
        dishSelectRow=indexPath.row;
      //  NSString *dishSelect=[NSString stringWithFormat:@"dish%d",indexPath.row];
        
        [isSelected removeAllObjects];
        [isSelectedAccompArray removeAllObjects];
        [isSelectedCookArray removeAllObjects];
        [self defaultDataArray];
        [accompmentTblView reloadData];
        [cookingTblView reloadData];
        [nonMandTblView reloadData];
        [nonMandtSelectOptionArray removeAllObjects];

        optionsView.hidden=NO;

    }

1 个答案:

答案 0 :(得分:0)

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

       //If possible make a singleton instance here of "dishDictionary" may solve your issue of crashing (Rather diclare it at the class level)
      //if(!dishDictionary)
          dishDictionary=[[NSMutableDictionary alloc]init];

      ..........

      //Replace this line :
      NSMutableArray *dishDicArray=[[NSMutableArray alloc]init];

      to

      NSMutableArray *dishesArray=[[NSMutableArray alloc]initWithArray:[dishDictionary objectForKey:dishSelect]];

      and remove
      dishesArray=[dishDictionary objectForKey:dishSelect];

      ..........
      //may will not crash than try this
}