Как использовать NSMutableDictionary в UIAlertView?
Я делаю счетчик калорий, и я создал UIAlertView, который дает мне список продуктов питания. Я сделал NSMutableDictionary
содержащие еду и калории:
@implementation FoodDatabase
-(id)init
{
self = [super init];
if(self)
{
food= [[NSMutableDictionary alloc] init];
[food setObject:@"111" forKey:@"Rice"];
}
return self;
}
-(NSString *) foodList: (NSString *) foodItem
{
for(NSString *key in [food allKeys])
{
if([foodItem isEqual: key])
{
NSLog(@"%@",foodItem);
return [food objectForKey:foodItem];
}
}
}
@end
В другом классе я создал UIAlertView
который дает список продуктов питания. Это фрагмент кода для элемента Райс:
NSString *buttonTitle = [alertView buttonTitleAtIndex:buttonIndex];
if([buttonTitle isEqualToString:@"Rice"])
{
NSString *xyz = [foodData foodList: @"Rice"];
food_calorie = ([xyz floatValue]);
UIAlertView *rice_alert=[[UIAlertView alloc] initWithTitle:@"Enter quantity of rice consumed" message:@"100 gms = 111 calories" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil];
[rice_alert addTextFieldWithValue:@"" label:@"Enter quantity in gms"];
RiceText = [rice_alert textFieldAtIndex:0];
RiceText.keyboardType = UIKeyboardTypeNumberPad;
RiceText.clearsOnBeginEditing = YES;
RiceText.clearButtonMode = UITextFieldViewModeWhileEditing;
RiceText.keyboardAppearance = UIKeyboardAppearanceAlert;
rice_alert.tag = RiceAlertView;
[rice_alert show];
[rice_alert release];
}
Я рассчитываю общее количество калорий, используя значение, введенное пользователем в _RiceText_
и значение _object_
возвращается за конкретный ключ (в данном случае рис). Но, похоже, не возвращает значение _object_
как NSLog
шоу _(null)_
для значения _xyz_
, Куда я иду не так??
1 ответ
Вся ошибка в том, что объект foodData
не инициализирован должным образом. Итак, инициализируйте его
Хорошая документация - https://developer.apple.com/library/ios/documentation/cocoa/reference/foundation/Classes/NSObject_Class/Reference/Reference.html
и выборка данных из NSmutableDictionary
Помните key
который вы используете для сравнения в словаре, должен иметь такой же регистр (прописной - маленький), как определено ранее. Например, вы сохраняете объект для ключа 'example', но вы не можете получить его, используя ''Example'или'EXAMPLE'. Вы можете использовать только "пример", как определено ранее. А также
Вам не нужно получать массивы ключей из словаря и быстро перечислять его
Вы можете просто получить объект, используя objectForKey:
метод. Удачи.