1

Xcode は、特定の UITableViewController をインポートしていても、そのプロパティを見つけられないようで、クラスで正しく定義されているようです。

クリーン、派生データの削除、XCode の再起動、およびビルドを試みましたが、どれも機能しません。また、セッターを介してプロパティにアクセスしようとしました。

これは私のコードです:

MasterViewController.m

#import "DetailTableViewController.h"
...
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([[segue identifier] isEqualToString:@"nextScreen"]) {
    DetailTableViewController *detailTableViewController = [segue destinationViewController];
    NSInteger tagIndex = [(UIButton *)sender tag];
    detailTableViewController.productType = tagIndex;

    /*[detailTableViewController setProductType:tagIndex];*/ //This does not work either.
 } else  if ([[segue identifier] isEqualToString:@"anotherSegue"]){
    MyLoginViewController *loginViewController = [segue destinationViewController];
    loginViewController.delegate = self; //Funnily enough, this one works
 }
}

DetailTableViewController.h #import

@interface DetailTableViewController : UITableViewController<UITableViewDelegate, UITableViewDataSource> {
    NSInteger *productType;
}

 @property (nonatomic) NSInteger *productType;

@end

DetailTableViewController.m

@implementation DetailTableViewController

@synthesize productType = _productType;
...

編集:エラーは次の行に入ります:

detailTableViewController.productType = tagIndex;

なぜこれが起こるのかについて誰かが考えを持っていますか? ありがとう!

更新しました:

XCode が私のファイルを参照する方法に関連しているように見えますが、本当に奇妙です:

  • cmd + detailTableViewController (インスタンスを作成する場所) をクリックすると、実際のコードが表示されます。

     detailTableViewController *detailTableViewController = [segue destinationViewController];
    
  • しかし、インポート行を cmd + クリックすると、私のコードと同じ名前のインターフェイスが表示され、コードに含まれるプロパティがないことを除いて同じ宣言が表示されます。

    #import "DetailTableViewController.h"
    

誰かが同じ問題を経験しましたか?

4

4 に答える 4

0

detailTableViewControllerはナビゲーションコントローラーに埋め込まれていますか?その場合は、次の方法でアクセスする必要があります。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([[segue identifier] isEqualToString:@"nextScreen"]) {
    UINavigationController *nc = segue.destinationViewController;
    DetailTableViewController * detailTableViewController = [nc.viewControllers objectAtIndex:0]; // First view in nav controller
    NSInteger tagIndex = [(UIButton *)sender tag];
    detailTableViewController.productType = tagIndex;
}
于 2012-10-16T16:41:13.073 に答える
0

[segue destinationViewController]そのメソッドはジェネリックを返すため、必要なタイプのコントローラーにキャストする必要がありますUIViewController(どのタイプのクラスにするかがわからないため、キャストする必要があります)

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"nextScreen"]) {

        // cast destinationViewController to DetailTableViewController
        DetailTableViewController *detailTableViewController = (DetailTableViewController*)[segue destinationViewController];
        NSInteger tagIndex = [(UIButton *)sender tag];

        detailTableViewController.productType = tagIndex;

    } else if ([[segue identifier] isEqualToString:@"anotherSegue"]) {

        // cast destinationViewController to MyLoginViewController
        MyLoginViewController *loginViewController = (MyLoginViewController*)[segue destinationViewController];
        loginViewController.delegate = self;

    }
}

これでうまくいくはずです。

于 2012-10-16T17:05:01.877 に答える
0

詳細コントローラーにクラス以外の名前を付けます (かなり明白です)。

detailTableViewController *detailTableViewController

為に:

detailTableViewController *detailTable
于 2012-10-16T16:37:00.993 に答える