0

特定のビューを記憶するある種のセットアップ ウィザードを作成しようとしていますが、ARC を使用しているため、AppDelegate.m コードに問題があります。アプリをコンパイルするとスプラッシュ画面でクラッシュするため、これを修正する方法を知っている人はいますか..

私のAppDelegate.m:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    NSString *controllerName = [[NSUserDefaults standardUserDefaults] objectForKey:@"WIZARD_VIEW"];
    if ([controllerName length]) {
        Class controllerClass = NSClassFromString(controllerName);
        UIViewController *controller = [[controllerClass alloc] init];

    // Override point for customization after application launch.
    return YES;
    }

より明確にするために、viewcontroller ファイルに次のコードを提案として追加しました。

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [[NSUserDefaults standardUserDefaults] setObject:[[self class] description] forKey:@"WIZARD_VIEW"];
     NSLog(@"ViewWillAppear Done.");
    [[NSUserDefaults standardUserDefaults] synchronize];
}

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"WIZARD_VIEW"];
     NSLog(@"viewWillDisappear");
    [[NSUserDefaults standardUserDefaults] synchronize];
}

コンパイル中のクラッシュログ:

/Users/Tim/Documents/XCODE_DEV/App/AppDelegate.m:17:33: No visible @interface for 'NSUserDefaults' declares the selector 'forKey:'

/Users/Tim/Documents/XCODE_DEV/App/AppDelegate.m:20:27: Unused variable 'controller'
4

2 に答える 2

0

初めてデフォルトを登録する必要があります。デフォルトを登録するには、setObject:forKeyメソッドを呼び出すだけでは不十分であるため、registerDefaultsメソッドを使用する必要があります。

- (void)registerDefaults:(NSDictionary *)dictionary;

ドキュメント:
NSUserDefaults

だからあなたの場合:

NSUserDefaults* standard=[NSUserDefaults standardUserDefaults];
[standard registerDefaults: @{ @"WIZARD_VIEW" : [[self class]description]} ];

これらの行は、非静的メソッドの前に呼び出されるinitializeメソッドに配置することをお勧めします。デフォルトがすでに登録されている場合は問題ありませんが、アプリケーションの起動が2回目以降であれば、デフォルトは上書きされません。

于 2012-11-21T14:23:37.987 に答える
0

コンパイラの警告を見ると、AppDelegate.mの17行目で呼び出していると推測されforKey:ますNSUserDefaults

NSUserDefaultsメソッドがないforKey:ため、例外がスローされます。

おそらく間違った場所にある角括弧です。

于 2012-11-21T13:55:39.840 に答える