1

すべてのビューをコードで作成する利点がますますわかり、この開発スタイルに完全に切り替えることを望んでいます..そして、タイトルが示すように、私はいくつかの小さな問題を抱えています. いつものように、それは私がかろうじて見落としているものだと確信しています。私のコードを見て、提案をしてもらえますか? ARC が有効になっています。

-(id)init;アプリのデリゲートでメソッドをチェックすると、メソッドがnilを返し、その理由がわかりません...self = [super init];呼び出しは常に機能しているように見えますが、この場合はそうではありません。

main.m :

int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([BCAppDelegate class]));
    }
}

BCAppDelegate.mで:

@implementation BCAppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.backgroundColor = [UIColor whiteColor];

    BCViewController *bcv = [[BCViewController alloc] init];

    if (bcv == nil) { printf("it's nil\n"); }

    UIView *view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    [view setBackgroundColor:[UIColor blueColor]];
    [bcv setView:view];

    [self.window setRootViewController:bcv];
    [self.window makeKeyAndVisible];
    return YES;
}

BCViewController.h :

@interface BCViewController : UIViewController <UIImagePickerControllerDelegate>
{
    /*some IVARS*/
}

-(id)init;

@end

BCViewController.mで:

@implementation BCViewController

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

-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { return nil; }

-(id)init
{
    self = [super init];
    if (!self) {
        return nil;
    }
    return self;
}

- (void)loadView
{
    /* No Code yet */
}
4

1 に答える 1

4
-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
     return nil; 
}

そうしないでください。これは、UIViewController の指定された初期化子です。このクラスの機能を壊しています。呼び出しの結果を返すsuper(場合によっては追加の初期化を伴う) か、このメソッドをまったく実装しないでください。

ビュー コントローラーのビュー全体をコードで生成するには、 を実装しloadViewます。それで全部です。繰り返しますが、あなたがやっているように空で実装しないでください! 実装loadViewする場合は、UIView を作成して設定する必要self.viewがあります。

ドキュメントを読んで、読んで、読んでください!それはあなたの責任が何であるかを教えてくれます。読んで従う。フレームワークとともに、フレームワークのために作業し、フレームワークを攻撃したり破壊したりしないでください。

これは、View Controller を使用し、ペン先を使用せずにアプリを開始する方法を示す私の本の一部です。

http://www.apeth.com/iOSBook/ch19.html#_manual_view

于 2013-03-28T00:38:11.920 に答える