На дрожи... iOS

Итак, у меня есть IBAction yesNo что я хочу быть побежденным на мероприятии встряски. Не слишком уверен, почему это не работает. Следовали всей документации.

-(BOOL)canBecomeFirstResponder
{
    return YES;
}

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event 
{
    if (event.subtype == UIEventSubtypeMotionShake)
    {
        [self yesNo];
    }
}

А потом сам IBAction:

- (IBAction)yesNo 
{
    int rNumber = rand() % 26;  
    NSUserDefaults *def=[NSUserDefaults standardUserDefaults];
    if ([[def objectForKey:@"activeVersion"] isEqualToString:@"0"])
    {
        switch (rNumber) {
            case 0:
                result.text  = @"Never";
                break;
            case 1:
                result.text = @"If you're lucky...";
                break;
            case 3:
                result.text = @"Think twice";
                break;
            ...
            default:
                break;
        }
    }
    else if ([[def objectForKey:@"activeVersion"] isEqualToString:@"1"])
    {
        switch (rNumber) {
            case 0:
                result.text  = @"Never1";
                break;
            case 1:
                result.text = @"If you're lucky...1";
                break;
            ...
            case 25:
                result.text = @"Very doubtful2";
                break;

            default:
                break;
        }
    }
    else if ([[def objectForKey:@"activeVersion"] isEqualToString:@"3"])
    {
        switch (rNumber) {
        case 0:
            result.text  = @"Never3";
            break;
        ...
        case 25:
            result.text = @"Very doubtful3";
            break;

        default:
            break;
    }
}   
}

В основном то, что у меня есть, это фортуна, и когда iPhone потрясен, мне нужно запустить IBAction.

3 ответа

Решение

Вы сделали это мнение первым респондентом? Т.е. [yourView becomeFirstResponder]; (вероятно, от некоторых viewDidAppear: метод). Возможно, вы захотите проверить, действительно ли это первый респондент, когда вы встряхиваете свое устройство.

Когда я переключался с определения всего графически в IB на программно встроенный в XCode, я забыл сделать представление первым респондентом вообще. Вот код, который в конечном итоге исправил это:

-(void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    [self becomeFirstResponder];
    NSLog(@"self is first responder %i",[self isFirstResponder]);
}

Первое, что я хотел бы спросить, должно ли это быть определено как IBAction. Если вы вызываете его только из кода, вы можете использовать вместо него (void) (просто выбор стиля).

Во-вторых, вы уверены, что метод на самом деле вызывается? Добавьте туда NSLog, чтобы убедиться.

В-третьих, вы уверены, что [def objectForKey:@"activeVersion"] возвращает строку? Возвращено ли значение, которое вы ожидаете? Добавьте туда NSLog, чтобы убедиться.

Я предполагаю, что один из NSLogs даст вам ответ на ваш вопрос, так как остальная часть вашего кода выглядит нормально.

Другие вопросы по тегам