[英]Referencing superview's methods
我正在Xcode中創建一個應用程序,並且遇到了一些問題。 我使用GameKit框架允許兩個iOS設備之間的藍牙通信。 已設置該應用程序,以使其中一個設備是“主設備”,另一個設備是“從屬設備”,並根據從“主設備”設備接收的數據更改其屏幕內容。 用戶可以選擇是主機還是從機,並且做出選擇后,另一台設備將自動成為相反的角色。 所有這些都在一個視圖控制器類中完成。 選擇角色后,會將子視圖添加到baseViewController。
我的問題是,當添加子視圖時,我希望能夠使用baseViewController類中的方法發送數據。 使用當前設置,調用該操作的設備becomeMaster:sender
崩潰。
到目前為止,我嘗試過的是
BaseViewController:
-(IBAction)becomeMaster:(id)sender {
[self dataToSend:@"slave"]; //tells peer device to become slave, since this device is master
masterViewController = [[MasterViewController alloc] initWithNibName:@"MasterViewController" bundle:nil];
[masterViewController setBaseViewController:self];
[self.view addSubview:masterViewController.view];
}
-(void)dataToSend:(NSString *)direction {
//—-convert an NSString object to NSData—-
NSData* data;
NSString *str = [NSString stringWithString:direction];
data = [str dataUsingEncoding: NSASCIIStringEncoding];
[self mySendDataToPeers:data];
}
-(void)dataToSend:(NSString *)direction {
//—-convert an NSString object to NSData—-
NSData* data;
NSString *str = [NSString stringWithString:direction];
data = [str dataUsingEncoding: NSASCIIStringEncoding];
[self mySendDataToPeers:data];
}
//----------------------------------------------------------------------------//
- (void)receiveData:(NSData *)data fromPeer:(NSString *)peer inSession:(GKSession *)session context:(void *)context {
//—-convert the NSData to NSString—-
NSString* str;
str = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
[self useReceivedData:str];
[str release];
}
-(void)useReceivedData:(NSString *)str {
if ([str isEqualToString:@"forward"]) {
[slaveViewController.view setBackgroundColor:[UIColor blackColor]];
}
}
MasterViewController:
-(void)setBaseViewController:(BaseViewController *)bvc {
baseViewController = bvc;
}
-(IBAction)goForward:(id)sender {
actionLabel.text = @"goingForward";
[baseViewController dataToSend:@"forward"];
}
大部分代碼是標准Apple文檔/示例的一部分,但我將其包括在內是為了理解邏輯流程。
我相信問題出在與becomeMaster:sender
和setBaseViewController:bvc
方法有關。 誰能幫忙解決? 非常感謝!
您會發生哪種崩潰? EXC_BAD_ACCESS
? 嘗試在可執行文件的參數中打開NSZombieEnabled
。 很難說是什么導致崩潰的原因,但是您可以嘗試將setBaseViewController:
實現更改為此:
-(void)setBaseViewController:(BaseViewController *)bvc {
[self willChangeValueForKey:@"baseViewController"];
[baseViewController autorelease]
baseViewController = [bvc retain];
[self didChangeValueForKey:@"baseViewController"];
}
並添加[baseViewController release];
到MasterViewController
的-dealloc
方法。
請記住,這不是完全必要有一個定制的setter baseViewController
。 如果你在你的頭文件中的下列財產申報:
@property (nonatomic, retain) BaseViewController *baseViewController;
然后,您使用@synthesize baseViewController
,已經為您生成了-setBaseViewController:
方法,並內置了鍵值觀察支持。如果您不熟悉Objective-C 2.0屬性,建議閱讀Apple的文檔 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.