スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
このエントリーをはてなブックマークに追加

[iOS]xcode3とxcode4で開発した時の違い

自分は普段からview-basedで作成しています。
そのため、xcode3からxcode4へ移行した際は操作・見た目の違いに困惑しました。
今回はその一端の話です。

ここから本題
3から4への引っ越しの際、作成していたアプリケーションを4で起動してテストを行いました。
その時にビューが3で作成したものと大きく違っていたため、今回問題として取り上げました。

論から言いますと、「AppDelegate.mの[self.window makeKeyAndVisible]を削除する」というのが正解です。
ただ同じにするだけではView-Basedで作成したものをSingle Viewと同じものにはならないようです。

2011/12/5 修正
makeKeyAndVisibleが消去されても良いのはstoryboardでの作成時のみです。
xibではこれが必要になることが分かりました。
これが無い場合、UIWebVIewなどで表示される仮想キーボードの表示が正しく行えなくなる場合があります。
その他にもwindowに関連するUIなどが正常に動作しない可能性がありますので注意してください。


さて、
xcode3とxcode4でのview-basedの作成方法はちょっと違います。
まずview-basedという名前ではなくなっています。
xcode4では「Single View Application」と名前を変えています。
[iOS]xcode3とxcode4で開発した時の違い_1

また、そこで自動作成されるAppDelegateファイルのソース内容も大きく変わっています。

・windowの生成、関連付けのソースが大幅カット
・window、viewController変数が除去
・deallocの抹消


windowの管理はこれからAppDelegateではなくその親の方で管理されていくようです。
以下ソース比較です。

「(xcode3)View-Based Application」

//ヘッダーファイル
#import

@class Example_000ViewController;

@interface Example_000AppDelegate : NSObject {
UIWindow *window; //xcode4ではこの部分が不要になる
Example_000ViewController *viewController; //
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet Example_000ViewController *viewController; //xcode4ではこの部分が不要になる

@end



//メソッドファイル
#import "Example_000AppDelegate.h"
#import "Example_000ViewController.h"

@implementation Example_000AppDelegate

@synthesize window;
@synthesize viewController;


#pragma mark -
#pragma mark Application lifecycle

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

// Override point for customization after app launch.
// Set the view controller as the window's root view controller and display.
self.window.rootViewController = self.viewController; //xcode4ではこの部分が不要になる
[self.window makeKeyAndVisible]; //

return YES;
}


- (void)applicationWillResignActive:(UIApplication *)application {
/*
Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
*/
}


- (void)applicationDidBecomeActive:(UIApplication *)application {
/*
Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
*/
}


- (void)applicationWillTerminate:(UIApplication *)application {
/*
Called when the application is about to terminate.
See also applicationDidEnterBackground:.
*/
}


#pragma mark -
#pragma mark Memory management

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
/*
Free up as much memory as possible by purging cached data objects that can be recreated (or reloaded from disk) later.
*/
}

//xcode4ではこの部分が不要になる
- (void)dealloc {
[viewController release];
[window release];
[super dealloc];
}


@end

「(xcode4)Single View Application」

//ヘッダーファイル
#import

@interface AppDelegate : UIResponder

@property (strong, nonatomic) UIWindow *window;

@end


//メソッドファイル
#import "AppDelegate.h"

@implementation AppDelegate

@synthesize window = _window;

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

- (void)applicationWillResignActive:(UIApplication *)application
{
/*
Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
*/
}

- (void)applicationDidEnterBackground:(UIApplication *)application
{
/*
Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
*/
}

- (void)applicationWillEnterForeground:(UIApplication *)application
{
/*
Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
*/
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
/*
Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
*/
}

- (void)applicationWillTerminate:(UIApplication *)application
{
/*
Called when the application is about to terminate.
Save data if appropriate.
See also applicationDidEnterBackground:.
*/
}

@end
このエントリーをはてなブックマークに追加

tag : xcode3 xcode4 引っ越し xcode(3.2.6) xcode(4.2)

コメントの投稿

非公開コメント

Translation


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。
プロフィール

チーズくん

Author:チーズくん
個人的メモをただ羅列しています。
twitter:@cheese1038

バロメーター
最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。