0

私は以下の状況について混乱しています。ビューコントローラー(VC)があり、1つのサブビュー(SubV)と1つの他のクラスがあります。(classA)また、classAから呼び出されるイベントハンドラーがあります。このイベントハンドラーでVCのsubVを変更します。

VCから直接SubVにアクセスすると、OK、サブビューの画像が変更されます。しかし、classAがVCのイベントハンドラーをトリガーすると、VCに到達し、subViewのメソッドにもアクセスしますが、subViewに変更はありません!!! (私もデリゲートを試しますが、結果は同じです)

ViewController.h

@interface ViewController : UIViewController {
.
IBOutlet SubView *subView;
ClassA *classA;
.
}
@property (retain, nonatomic) IBOutlet SubView *subView;
@property (retain, nonatomic) ClassA *classA;

ViewController.m

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.subView = [self.subView init];
self.classA = [[ClassA alloc] init];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(eventListener:) name:@"eventType" object:nil];

}

- (void) eventListener:(NSNotification *) not
{
   [self.subView RefreshView]; // it doesnt work! calls refreshView method but no change
}

- (IBAction)buttonPressed:(id)sender
{ 
   [self.subView RefreshView]; // it works perfect
}

SubView.h

@interface SubView : UIImageView 

@property int state;
@property NSArray *imageArray;

- (void) RefreshView;
- (id) init;

@end

SubView.m

- (void) RefreshView{
[self stopAnimating];
self.imageArray = [NSArray arrayWithObjects:[UIImage imageNamed:@"a.png"], nil];
self.animationDuration = 1;   
self.animationImages = self.imageArray;
self.animationRepeatCount = 0;
[self startAnimating];
}

ClassA.m

-(void)methodA{
  [myEvent requestEvent];
}

だから、私がここでやろうとしているのは、Viewcontrollerのボタンと別のclassAで実行されているスレッドを使用してsubViewにアクセスして変更することです

4

2 に答える 2

0

最後に私は解決策を見つけました!ClassA で実行するスレッドのため、' を使用する必要があります。

[self performSelectorOnMainThread:@selector(myMethodToRefreshSubView) withObject:nil    waitUntilDone:NO];

私のeventListenerメソッドで。

于 2013-02-04T12:09:00.317 に答える
0

編集:これをどうするかはよくわかりません。あなたは私が提案した変更に合わせて投稿を編集しました。

クラス SubView を UIImageView のサブクラスとして作成しました。ただし、IBOutlet *subView はクラス SubView のメンバーではなく、UIImageView のメンバーです。これは xib/storyboard にも引き継がれる可能性があると思います(?) もしそうなら、これは、subView インスタンスに送信するすべてのメッセージが、独自のクラスではなくストック UIImageView によって処理されることを意味します...

@property (retain, nonatomic) IBOutlet UIImageView *subView;

おそらく読むべき

@property (retain, nonatomic) IBOutlet SubView *subView;
于 2013-02-03T19:11:59.413 に答える