0

次のコードをビルドしようとすると、コンパイラエラーが発生します。その単純なビュー(UntitledViewController)には、他のビュー(popoverview)でポップアップを作成して表示するshowPopUpを呼び出すバーボタンアイテムを備えたナビゲーションバーがあります。

Popoverviewには、ポップアップを閉じようとしているhidePopOverを呼び出すボタンがありますが、このコンパイラエラーが発生します。

"expected ':' before '.' token"

この行で:

[UntitledViewController.popOver dismissPopoverAnimated:YES];

コード行をコメントアウトするか、NSLogを配置すると、正常に機能します

UntitledViewController

/*--UntitledViewController.h--*/

#import <UIKit/UIKit.h>

@interface UntitledViewController : UIViewController {
    UIPopoverController *popOver;
    IBOutlet UIBarButtonItem *popOverbutton;
}

@property (nonatomic, retain) UIPopoverController *popOver;
@property (nonatomic, retain) IBOutlet UIBarButtonItem *popOverbutton;

-(IBAction)showPopUp;

@end


/*--UntitledViewController.m--*/

#import "UntitledViewController.h"
#import "popoverview.h"

@implementation UntitledViewController
@synthesize popOverbutton, popOver;

-(IBAction)showPopUp {
      popoverview *popView = [[popoverview alloc] initWithNibName:@"popoverview" bundle:nil];
      popOver = [[UIPopoverController alloc] initWithContentViewController:popView];
      [popOver presentPopoverFromBarButtonItem:popOverbutton permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
 }
 ...

popoverview

/*--popoverview.h--*/   

#import <UIKit/UIKit.h>

@interface popoverview : UIViewController {

}
-(IBAction)hidePopOver;
@end


/*--popoverview.m--*/

#import "popoverview.h"
#import "UntitledViewController.h"

@implementation popoverview
-(IBAction)hidePopOver {
    [UntitledViewController.popOver dismissPopoverAnimated:YES]; (ERROR "expected ':' before '.' token")
}
4

6 に答える 6

1

「dismissPopoverAnimated:」はインスタンス メソッドであるため、次のようにする必要があります。

[self.popOver dismissPopoverAnimated:YES];
于 2010-07-16T15:27:40.243 に答える
1

UntitledViewController はクラスです。プロパティにアクセスする場合は、インスタンスが必要です。

UntitledViewController * vc = [ UntitledViewController new ];

次に、インスタンスのプロパティにアクセスできます。

vc.popOver

Objective-C は、クラス変数もクラス プロパティもサポートしていません。

于 2010-07-16T15:29:10.437 に答える
0

プロパティにアクセスする前に、UntitledViewController のインスタンスを作成する必要があります。

UntitledViewController* myInstance = [[UntitledViewController alloc] init];
[myInstance.popOver dismissPopoverAnimated:YES];
于 2010-07-16T15:27:51.713 に答える
0

UntitledViewController クラスの popOver プロパティにアクセスしようとしています。クラスには、プロパティやインスタンス変数はありません。UntitledViewController クラスのインスタンスが必要です。

したがって、UntitledViewController インスタンスを popoverview に追加して、それを使用する必要があります。

于 2010-07-16T15:27:53.207 に答える
0

クラスで宣言UntitledViewControllerして いません。popoverview

その特定の popOver をクラスから隠したい場合は、その特定の を持つインスタンスpopoverviewへの参照が必要です。UntitledViewControllerpopOver

余談ですが、命名規則に取り組みましょう。

于 2010-07-16T15:28:00.580 に答える
0

この行で:

[UntitledViewController.popOver dismissPopoverAnimated:YES];

そのクラスのインスタンスではなく、クラス を参照しています。UntitledViewController

于 2010-07-16T15:28:08.240 に答える