1

確かに、それは Objective-c の時点での私のことをより詳しく説明していますが、First Run チェックには困惑しています。このトピックに関するいくつかの Q&A を読みましたが、適切に機能させることができません。

これはケースです: applicationDidFinishLaunchingWitObjects の私の appDelegate.m ファイルで、メソッドを追加します

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if (![defaults objectForKey:@"firstRun"])
    [defaults setObject:[NSDate date] forKey:@"firstRun"];

[[NSUserDefaults standardUserDefaults] synchronize];

私のmainViewController.mに追加しました

-(void) firstRun
 {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if([defaults objectForKey:@"firstRun"])
{
    CGRect myFrame = CGRectMake(0, 0, 320, 460);
    UIView *myView = [[UIView alloc] initWithFrame:myFrame];
    myView.backgroundColor = [UIColor blueColor];
    [self.view addSubview:myView];
}
}

最後に、viewDidLoad (mainViewcontroller.m ファイル内) で:

    [self firstRun];

ビューが作成されていることがわかります (青色の背景色) が、次にアプリを再度起動すると、青色の背景ビューが表示されます。コードを他の場所に配置すると、青い背景の UIView がまったくありません。誰かが私のためにこれをクリアできますか、私は私が軌道に乗っていないことを知っています. 前もって感謝します。

4

1 に答える 1

3

ビューが読み込まれる前にキーをデフォルトに追加しているため、青い背景が毎回表示さ"firstRun"れます。そのため、ビューが読み込まれ[self firstRun]て呼び出されるときに常に表示されます。

これを修正するには、いくつかの方法があります。applicationDidFinishLaunchingWithObjects:これに対する適切な解決策は、デフォルトを設定する必要があるときに true に設定するアプリケーション デリゲートに Boolean プロパティを配置することです。このfirstRunメソッドは、デフォルトの代わりにデリゲートのプロパティをチェックして、これが最初の実行であるかどうかを判断します。

編集:この例では、ユーザーが Accept ボタンを押すことを参照しています。コメントを参照してください。

AppDelegate.h ファイルで、次のプロパティをインターフェイスに追加します@end

@property (nonatomic) BOOL firstRun;

AppDelegate.m の で、applicationDidFinishLaunchingWithObjectsコードを変更してプロパティを設定します。

if (![defaults objectForKey:@"firstRun"]) {
    self.firstRun = YES;
}

ビュー コントローラーで、ユーザーが Accept ボタンを押したときに firstRun 値を設定します。このようにして、ユーザーが同意する前にアプリが終了した場合でも、同意する必要がある画面が表示されます。

- (void) acceptTouched {
    ...
    if (![defaults objectForKey:@"firstRun"]) {
        [defaults setObject:[NSDate date] forKey:@"firstRun"];
    }
    ...
}

最後にfirstRun、デフォルトではなくプロパティを参照するようにメソッドを変更します。

- (void) firstRun {
    if (((AppDelegate*)[UIApplication sharedApplication].delegate).firstRun)
    {
        ...
    }
}

明らかに、AppDelegateアプリのデリゲート クラスの名前と一致するように変更します。

于 2013-03-06T17:58:23.990 に答える