2

メインに次のコードがありますheader file

NSMutableArray *array;
NSDictionary *dict,*dict1;

.mファイルには、アイテム名とその価格を表示する辞書の配列が含まれています。これをUITableView

 - (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section
   {
      return [array count];
   }

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
   { 
      static NSString *CellIdentifier = @"Cell";

      UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
      if (cell == nil) 
        {
           cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
        }
      cell.textLabel.text=[NSString stringWithFormat:@"%@ %@",[[array objectAtIndex:indexPath.row]objectForKey:@"name"],[[array objectAtIndex:indexPath.row]objectForKey:@"price"]];
                    return cell;        
   }

ユーザーがいずれかのアイテムを選択すると、パスと呼ばれるdictionary別のアイテムが送信され、数量が価格で乗算される必要がありますdictionaryVegQuantityViewController

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if(indexPath.row==0)
    {           
         VegQuantity *vegetarian1 = [[VegQuantity alloc] initWithNibName:@"VegQuantity" bundle:nil];    
        vegetarian1.pass=dict;
        [self presentModalViewController:vegetarian1 animated:YES];
    }
    if(indexPath.row==1)
    {           
        VegQuantity *vegetarian1 = [[VegQuantity alloc] initWithNibName:@"VegQuantity" bundle:nil];
        vegetarian1.pass=dict1;
        [self presentModalViewController:vegetarian1 animated:YES];
     }
}

- (void)viewDidLoad 
{
    array=[NSMutableArray array];
    dict=[NSDictionary dictionaryWithObjectsAndKeys:@"20.00",@"price",@"tomato soup",@"name",nil];
    [array addObject:dict]; 
    dict1=[NSDictionary dictionaryWithObjectsAndKeys:@"10.00",@"price",@"Veg Manchow soup",@"name",nil];
    [array addObject:dict1];
    NSLog(@"The array of dictionaries contains%@",array);
    [super viewDidLoad];
}

VegQuantity.h

NSDictionary *pass;
IBOutlet UIButton *done;
IBOutlet UITextField *input,*output;
NSNumber *prices;
float x,y,c;

VegQuantity.m

doneボタンは、その特定の料理のキーを取得し、ユーザーが入力した数量を掛けて、パスラインで 直面しtextfieldている出力に表示します。何が問題になる可能性がありますか?textfieldNSInvalidArgumentExceptionobjectForKey

-(IBAction)done:(id)sender
{   
    prices=[pass objectForKey:@"price"];
    x=[input.text floatValue];
    y=[prices floatValue];
    c=x*y;
    output.text=[NSString stringWithFormat:@"%f",c];
}
4

2 に答える 2

4

viewDidLoad メソッドの以下のコードを変更します。

array=[[NSMutableArray alloc]init];
dict=[[NSDictionary alloc] initWithObjectsAndKeys:@"20.00",@"price",@"tomato soup",@"name",nil];
[array addObject:dict]; 
dict1=[[NSDictionary alloc]initWithObjectsAndKeys:@"10.00",@"price",@"Veg Manchow soup",@"name",nil];
[array addObject:dict1];
于 2012-08-25T07:32:57.200 に答える
2

ケース配列では、dict と dict1 がautoreleasedオブジェクトです。これらのメンバー変数をviewDidLoadメソッドに保持します。または、これらの変数に保持プロパティを設定します。dictが解放されているため、クラッシュしています。クラッシュは、変数 dict が typeであると示しています。これは、そのオブジェクトCFStringが原因である可能性があります。autoreleasing

于 2012-08-25T06:30:42.463 に答える