2015-04-16 2 views
0

Я попытался открыть сообщение после того, как мое приложение открывается 5 раз и отправляет пользователя на сайт, если они нажмут «да», но по какой-то причине он не работает, может ли кто-нибудь помочь мне? им новичок, так я предполагаю, его довольно простую ошибку, вот мой код в приложении delegate.mПочему мое сообщение «Оцените мое приложение» не отправляет меня на сайт, когда я говорю «да»?

'@interface AppDelegate()

@end 

@implementation AppDelegate 


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    // Override point for customization after application launch. 

    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
    NSInteger launchCount = [prefs integerForKey:@"launchCount"]; 
    launchCount++; 
    [prefs setInteger:launchCount forKey:@"launchCount"]; 



    return YES; 

и это код в виде controller.m :

@interface ViewController() 

@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
    NSInteger launchCount = [prefs integerForKey:@"launchCount"]; 
    if (launchCount ==5) { 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"like this app?" message:@"rate us on the app store!" delegate:nil cancelButtonTitle:@"no thanks" otherButtonTitles:@"yes", @"remind me later", nil]; 
     [alert show]; 
    } 

} 

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ 

    if (buttonIndex == 1) { 
     //user hit remind later , so ignore 
    } 
    else if (buttonIndex == 2){ 
     [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://facebook.com"]]; 
     NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
     NSInteger launchCount = [prefs integerForKey:@"launchCount"]; 
     launchCount = 0; 
     [prefs setInteger:launchCount forKey:@"launchCount"]; 
    } 


}' 
+0

Я не знаю ответа на ваш вопрос, но несвязанный комментарий: это ваше намерение принять их через этот путь _every_ 5 запусков, если они нажмут Да? Если нет, прекратите сброс счетчика, когда они нажмут да (и если это так, перестаньте считывать значение счетчика, прежде чем сбросить его до 0, так как вам все равно, что это было до этого). – mah

+0

Теперь, возможно, связано с вашей проблемой ... когда вы создаете предупреждение, вам нужно указать себя как делегата? Если нет, как должен быть достигнут метод 'alertView: clickedButtonAtIndex:'? – mah

+0

Для решения проблемы вам необходимо использовать отладчик и установить контрольные точки на важных этапах. Например, правильно ли хранится «счет запуска»? – trojanfoe

ответ

2

несколько вещей:

  1. Вы никогда не установить делегата для предупреждения зрения, чтобы ни один из вашего а Метод делегата lert всегда будет вызван. Чтобы исправить это, установите параметр delegate:

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"like this app?" message:@"rate us on the app store!" delegate:self cancelButtonTitle:@"no thanks" otherButtonTitles:@"yes", @"remind me later", nil]; 
    
  2. Вы проверяете неправильные индексы кнопки и вы не должны жёстко индексов кнопки. Используйте следующее:

    -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ 
        if (buttonIndex == alertView.firstOtherButtonIndex) { 
         // user hit yes 
         [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://facebook.com"]]; 
         NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
         NSInteger launchCount = [prefs integerForKey:@"launchCount"]; 
         launchCount = 0; 
         [prefs setInteger:launchCount forKey:@"launchCount"]; 
        } else if (buttonIndex == alertView.firstOtherButtonIndex + 1){ 
         // user hit remind later , so ignore 
        } 
    } 
    
  3. Как уже упоминалось в комментариях ниже ваш вопрос, вы, вероятно, не хотите сбросить launchCount, когда пользователь нажимает «да». Это означает, что пользователю будет предложено оценить приложение снова 5 запусков после того, как они выбрали «да». Это будет раздражать. Также нет причин читать счет запуска непосредственно перед его сбросом. Так просто сделать:

    -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ 
        if (buttonIndex == alertView.firstOtherButtonIndex) { 
         // user hit yes 
         [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://facebook.com"]]; 
        } else if (buttonIndex == alertView.firstOtherButtonIndex + 1){ 
         // user hit remind later , so ignore 
        } 
    } 
    

отметить также, что UIAlertView устарел. Если вы не поддерживаете iOS 7 или ранее, вы должны использовать вместо этого UIAlertController.

+0

Спасибо за ваши ответы, я просто изменил нуль на себя и от 1 до 2 и от 2 до 1, и все работает, спасибо еще раз! –