私はより大きな問題を解決しようとしていますが、ARC がビューを私の NSViewController にリリースするのが早すぎるという事実を指摘しています。と思います :) そこで、状況を再構築するための簡単なアプリを作成しました。
シンプルな ARC Cocoa アプリケーションがあります。のウィンドウで、で宣言されているMainMenu.xib
aCustom View
に aを接続します@property (strong) IBOutlet NSView *theView;
AppDelegate.h
プロパティを合成してAppDelegate.m
から、次のように呼び出します。
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
TestViewController *tvc = [[TestViewController alloc] initWithNibName:@"TestViewController" bundle:nil];
[_theView addSubview:[tvc view]];
}
TestViewController
が表示されます-Custom View
問題ありません。NSButton が 1 つ含まれています。これは、呼び出されたメソッドと-(IBAction)btnPressed:(id)sender
、IBOutlet
.
私はTestViewController.h
宣言します:
@property (nonatomic, strong) IBOutlet NSTextField *textField;
@property (nonatomic, strong) NSString *theString;
-(IBAction)btnPressed:(id)sender;
TestViewController.m
I then doで
@synthesize theString = _theString;
@synthesize textField = _textField;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Initialization code here.
_theString = @"Hello World";
}
return self;
}
-(IBAction)btnPressed:(id)sender
{
[_textField setStringValue:_theString];
}
アプリを実行してボタンを押すとクラッシュします。ゾンビをチェックすると、次のように表示されます。
# Address Category Event Type RefCt Timestamp Size Responsible Library Responsible Caller
0 0x7f97a3047560 TestViewController Malloc 1 00:00.652.631 128 TestARC -[AppDelegate applicationDidFinishLaunching:]
1 0x7f97a3047560 TestViewController Retain 2 00:00.653.088 0 TestARC -[TestViewController initWithNibName:bundle:]
2 0x7f97a3047560 TestViewController Release 1 00:00.653.089 0 TestARC -[TestViewController initWithNibName:bundle:]
3 0x7f97a3047560 TestViewController Retain 2 00:00.653.912 0 AppKit -[NSNib instantiateNibWithOwner:topLevelObjects:]
4 0x7f97a3047560 TestViewController Release 1 00:00.658.831 0 AppKit -[NSNib instantiateNibWithOwner:topLevelObjects:]
5 0x7f97a3047560 TestViewController Release 0 00:00.662.377 0 Foundation -[NSNotificationCenter postNotificationName:object:userInfo:]
6 0x7f97a3047560 TestViewController Zombie -1 00:01.951.377 0 AppKit -[NSApplication sendAction:to:from:]
私は何を間違っていますか?ありがとう