6

問題

IBOutlet は、使用する前にリリースされます。

私が欲しいもの

テーブル ビューをリロードできるように、アプリ デリゲートからナビゲーション コントローラーにアクセスしたいと考えています。

マイセットアップ

私は持っている:

  • ターゲット設定でメイン インターフェイスとして設定されている Main.xib
  • アプリ デリゲートの ivar としてのナビゲーション コントローラーへの IBOutlet
  • この IBOutlet は、Main.xib の正しいナビゲーション コントローラーに接続されています。
  • App Delegate は xib でインスタンス化されますが、ファイルの所有者として設定されません

ARC、Xcode 4.3.2、および iOS5.1 を使用しています

私が試したこと

  • 配備先の変更
  • ナビゲーション コントローラー、アプリ デリゲートの dealloc にブレーク ポイントを設定 - それらは呼び出されません
  • ARC と IBOutlets で見つけたものをすべて読んでいます - 私がやっていることと矛盾するものは何もないようです
  • 必要最小限のクラスだけで新しいプロジェクトを作成する - まったく同じ問題が発生します

コード

KPAppDelegate.h

@interface KPAppDelegate : UIResponder <UIApplicationDelegate> {
    IBOutlet  KPBrowseExpensesNavigationController *nc;
}

@property (strong) IBOutlet KPBrowseExpensesNavigationController *nc;

KPAppDelegate.m

@implementation KPAppDelegate

@synthesize nc;

-(void)setNc:(KPBrowseExpensesNavigationController *)nc_ {
    nc = nc_; // This gets called on view load and nc gets set.
}

...snip...

// This is called about 5 seconds after app startup
-(void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)objects {
        // By the time we get here, nc is nil.
        UITableViewController *tvc = [[nc viewControllers] objectAtIndex:0];
        [[tvc tableView] reloadData];
}

@end

アップデート

私はここで本当にばかげたことをしているに違いない。信じられないほど単純なプロジェクトでさえ、この問題を示しています。以下のリンクを参照してください。

問題を示す簡単なテスト プロジェクトをダウンロードします。

4

4 に答える 4

2

Interface BuilderからのアウトレットはKPBrowseExpensesNavigationControllerタイプとして設定されていますか?そうでない場合は、nibとViewControllerの間に接続を作成しません。

IdentityInspectorでカスタムクラスをKPBrowseExpensesNavigationControllerとして設定する必要があります

于 2012-06-19T12:33:56.810 に答える
2

Window nib で、FilesOwner クラスを UIApplication として設定し、そのデリゲートを Outlets から AppDelegate オブジェクトにポイントします。これは、プロジェクトの例で間違っていることです。

于 2012-06-19T13:51:28.980 に答える
1

なぜそれをプロパティと非プロパティとして宣言するのかわかりません。私はこのようなことをする必要があります:

@interface KPAppDelegate : UIResponder <UIApplicationDelegate> 

@property (nonatomic, strong) IBOutlet KPBrowseExpensesNavigationController *nc;

そしてあなたの実装では:

@implementation KPAppDelegate

@synthesize nc = _nc; // So you don't accidentally use nc

...snip...

// This is called about 5 seconds after app startup
-(void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)objects {
        // By the time we get here, nc is nil.
        UITableViewController *tvc = [[**self.nc** viewControllers] objectAtIndex:0];
        [[tvc tableView] reloadData];
}

@end

お役に立てれば!

于 2012-06-19T12:19:16.387 に答える
1

ナビコントローラーの割り当て場所がわかりませんでした。プロパティを宣言するだけでは値が割り当てられないため、nil になります。-didFinishLaunchingWithOptionsアプリ デリゲートで、alloc/init ステートメントを設定します。他のすべては問題ないように見えます。

KPBrowseExpensesNavigationController *nc = [[KPBrowseExpensesNavigationController alloc] init];

カスタム init がある場合は、それも使用できますが、使用する前に必ずセットアップしてください。

于 2012-06-19T13:45:08.897 に答える