NSUserDefaults - 在首次启动时显示UIAlertView - 按钮行为

时间:2011-05-05 23:15:39

标签: iphone objective-c nsuserdefaults uialertview

我正在使用NSUserDefaults在我第一次加载应用程序时显示UIAlertView。警报有一个Dismiss和一个Rate Now按钮。 Dismiss是自我解释并且工作正常,但是,我希望“立即评分”按钮打开设备上App Store中的相关位置。我在AppDelegate.m文件中使用以下代码。

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *alertshown = [defaults stringForKey:@"alertshown"]; {
if (alertshown == nil) {

    UIAlertView *oneTimeWelcome = [[UIAlertView alloc]
                                  initWithTitle: @"Thank You"
                                  message: @"Blah Blah Blah Blah"
                                  delegate: self
                                  cancelButtonTitle:@"Dismiss"
                                  otherButtonTitles:@"Rate Now",nil];
    [oneTimeWelcome show];
    [oneTimeWelcome release];

    [defaults setObject:@"alertwasdisplayed" forKey:@"alertshown"];
}

先前在UIAlertView中使用了第二个按钮我使用此代码来调用新视图;

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == 0)
    {
        // Do something wonderful here
    }
    else if (buttonIndex == 1)
    {
        AppSupportView *controller = [[AppSupportView alloc] initWithNibName:@"AppSupportView" bundle:nil];
        controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
        [self presentModalViewController:controller animated:YES];
        [controller release];

    }

但是,当在AppDelegate.m文件中使用代码时,这不起作用?任何示例都可以让我的立即评价按钮打开App Store。抱歉格式化,但它不会让我改变文本

编辑 - 这是我在AppDelegate.m文件中处理的全部代码

{//以下代码块在用户首次打开应用程序时显示UIAlert。仅在alertshown == 0

时显示
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *alertshown = [defaults stringForKey:@"alertshown"]; {
if (alertshown == nil) {

    UIAlertView *oneTimeWelcome = [[UIAlertView alloc]
                                  initWithTitle: @"Thank You"
                                  message: @"Thanks, please rate blah blah blah"
                                  delegate: self
                                  cancelButtonTitle:@"Dismiss"
                                  otherButtonTitles:@"Rate Now",nil];
    [oneTimeWelcome show];
    [oneTimeWelcome release];

    [defaults setObject:@"alertwasdisplayed" forKey:@"alertshown"];

}     }

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

    if (buttonIndex == 0)
    {
        // Yes, do something
    }
    else if (buttonIndex == 1)
    {

3 个答案:

答案 0 :(得分:1)

我假设当你说它不起作用时,它就不会编译。

您正在致电

 [self presentModalViewController]
来自app delegate的

,它不是UIViewController。您需要实例化一个UIViewController并从那里调用它。无论如何,尽快退出appdelegate是一种很好的做法 - 只需在那里做APP级别的事情,并将UI,处理等代码放入视图控制器中。

答案 1 :(得分:1)

确保您的AppDelegate遵守UIAlertViewDelegate - 协议。

AppDelegate头文件中的示例定义:

@interface MyAppDelegate : NSObject <UIApplicationDelegate, UIAlertViewDelegate> 

答案 2 :(得分:0)

NSUserDefault值设置一些默认值 - &gt;如果 NULL ,则显示AlertView并将一些值填入NSUserdefault。或者没有。