2011-12-13 8 views
0

私は非常に簡単なプロジェクトを持っています。非常に疲れた。 NSTableViewにテキストを読み込むだけです。それでおしまい。しかし、新しいウィンドウとコントローラを使用しています。これは「改訂版」と呼ばれています。NSTableviewクラッシュを伴う新しいNSWindow

新しいウィンドウがアクティブになると、すぐにクラッシュするか、ロックされます。コンソールにエラーはありません。バックグラウンドでAppDelegateのウィンドウの後ろに座っていると、情報をうまく読み込めるように見えます。テーブルが完全に埋まっているのがわかります。しかし、ウィンドウをクリックしてアクティブにするとすぐに、クラッシュ/ロックされます。

これは私をナットにしています。私はそれがメモリ管理と関係していることは知っていますが、どこで、どのように、またはなぜそれを理解することはできません。

私は、XCode 4.2のリリースノートはありません。(もちろん、いくつかの設定を変更しない限り)。

のすべての接続AppDelegate.h

#import <Cocoa/Cocoa.h> 
@interface AppDelegate : NSObject <NSApplicationDelegate> 
@property (assign) IBOutlet NSWindow *window; 
@end 

AppDelegate.m

#import "AppDelegate.h" 
#import "Revisions.h" 

@implementation AppDelegate 

@synthesize window = _window; 

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{  
    Revisions *rev = [[Revisions alloc] initWithWindowNibName:@"Revisions"]; 
    [rev loadWindow];  
} 

Revisions.h

#import <Cocoa/Cocoa.h> 

@interface Revisions : NSWindowController 
{  
    IBOutlet NSTableView *quicktimesList; 
    IBOutlet NSTableView *unusedDataList; 
} 

@end 

Revisions.m

#import "Revisions.h" 

@implementation Revisions 


- (id)initWithWindow:(NSWindow *)window 
{ 
    self = [super initWithWindow:window]; 
    if (self) { 
     // Initialization code here. 
    } 

    return self; 
} 

- (void)windowDidLoad 
{ 
    [super windowDidLoad];  
    // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file. 
} 


- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView 
{ 
    NSLog(@"Creating number of rows."); 
    return 10; 
} 

- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex 
{ 
    NSLog(@"Starting Loop."); 
    NSString *words = [[NSString alloc] initWithFormat:@"Row %i", rowIndex]; 
    NSLog(@"Looping %i", (int)rowIndex); 
    return words; 
} 

@end 
+0

"メモリ管理と関係していることは分かっています..."どのような理由で? –

答えて

2

Xcode 4.2で潜在的なメモリリークを扱う際には、いくつかのヒントを紹介します。

  1. Mac用のソフトウェアを作成するときは、ビルド設定でガベージコレクションを有効にすることをお勧めします。ビルド設定の検索バーで「ガベージコレクション」を検索し、「必須」に設定するだけです。

  2. プロジェクトでメモリリークが発生している場合は、「製品」メニューを押して「分析」をクリックします。これはメニュー項目の状態として、潜在的なメモリリークを分析して追跡します。

希望します。

+0

それは、ヨハンでした!どうもありがとうございます。あなたは秒を持っている場合、私はXcode 4.2で探しているはずのもののための良いソースのリンクを私に送ることができますか? – mxisaac

+0

Xcode 4.2に関してわからないことをGoogleから検索することをお勧めします。 Xcode 4.2の機能には、十分な回答が多数含まれていますが、複数の質問があります。 –

+0

なぜガベージコレクションを有効にするのがよいでしょうか?なぜARCを有効にしないのですか? –

関連する問題