2013-02-24 38 views
0

因此,我使用asyncsocket库https://github.com/caydenliew/AsyncSocket。 和我有一个按钮,当按下时发送一个字符串到服务器。不存在错误,但我得到以下异常:***终止应用程序由于未捕获的异常'NSInvalidArgumentException'无法识别的选择器发送到实例

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '- 

[key sendData:]: unrecognized selector sent to instance 0x1002f810' 
*** First throw call stack: 
(0x18ce012 0x16f3e7e 0x19594bd 0x18bdbbc 0x18bd94e 0x3f26 0x1707705 0x63b2c0 0x63b258 0x6fc021 0x6fc57f 0x6fb222 0x66ab1d 0x66af02 0x648d4a 0x63a698 0x26b1df9 0x26b1ad0 0x1843bf5 0x1843962 0x1874bb6 0x1873f44 0x1873e1b 0x26b07e3 0x26b0668 0x637ffc 0x46fd 0x2865 0x1) 
libc++abi.dylib: terminate called throwing an exception 

这里是keyViewController.h

@interface keyViewController() 
{ 
CFURLRef sysSoundTestPath; 
GCDAsyncSocket *asyncSocket; 

} 
-(IBAction) touchB:(id)sender; 
-(IBAction)touchE:(id)sender; 
-(void)loadViewFromNIB:(NSString *)nibName owner:(id)owner; 
- (void)sendData:(NSString *) dataSend ; 
@end 

和.M

@implementation keyViewController 
- (void)sendData: (NSString *) dataSend { 
    if (asyncSocket == nil) { 
     asyncSocket = [(keyAppDelegate *)[[UIApplication sharedApplication] delegate] asyncSocket]; 
     asyncSocket.delegate = self; 
    } 

    NSData *data = [dataSend dataUsingEncoding:NSUTF8StringEncoding]; 

    //write data to server 
    [asyncSocket writeData:data withTimeout:-1 tag:0]; 
    //listen to server for message 
    [asyncSocket readDataToData:[GCDAsyncSocket CRLFData] withTimeout:30.0 tag:1]; 
} 

- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag { 
    //data from server 
    NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
    NSLog(@"%@",str); 
} 

- (void)socket:(GCDAsyncSocket *)sock didWriteDataWithTag:(long)tag { 
    //prepare to read the next message from server again 
    [asyncSocket readDataToData:[GCDAsyncSocket CRLFData] withTimeout:30.0 tag:1]; 
} 


- (IBAction)touchB:(id)sender 
{ 

    NSLog(@"down"); 
    NSString *path = [[NSBundle bundleWithIdentifier:@"com.apple.UIKit"] pathForResource:@"Tock" ofType:@"aiff"]; 
    NSURL* url = [NSURL fileURLWithPath:path]; 
    SystemSoundID soundID; 
    AudioServicesCreateSystemSoundID((CFURLRef)objc_unretainedPointer(url), &soundID); 
    AudioServicesPlaySystemSound(soundID); 
    [sender transmitHandle]; 
    NSString *name = [sender restorationIdentifier]; 
    [sender sendData:name]; 


} 

- (IBAction)touchE:(id)sender 
{ 
    NSLog(@"up"); 
    [sender transmitHandle]; 
} 

-(void)loadViewFromNIB:(NSString *)nibName owner:(id)owner 
{ 


    NSArray *objects = [[NSBundle mainBundle] loadNibNamed:nibName owner:owner options:nil]; 
    NSArray *subviews = [objects[0]subviews]; 
    for (UIView *subview in subviews) { 
     if ([subview isKindOfClass:[UIButton class]]) { 
      UIButton *key = (UIButton *)subview; 
      [key addTarget:self action:@selector(touchB:) forControlEvents:UIControlEventTouchDown]; 
      [key addTarget:self action:@selector(touchE:) forControlEvents:UIControlEventTouchUpInside]; 

      //NSString *ident = key.restorationIdentifier; 
      //NSLog(@"%@",ident); 
     } 
    } 
} 

- (void)viewDidLoad 

{ 
    [super viewDidLoad]; 
    [self.view setMultipleTouchEnabled:YES]; 
    [self loadViewFromNIB:@"keyViewController" owner:self]; 

} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    //Dispose of any resources that can be recreated. 
} 

@end 

我在做什么错???

回答

0

IBAction的发件人是被按下的按钮。 sendData是控制器的一种方法。你正在发送sendData到被按下的按钮。将发件人更改为自我。我不确定你想发送什么字符串到发送数据方法,但我不确定你的按钮是否有属性调用restoreIdentifier。

- (IBAction)touchB:(id)sender 
{ 

    NSLog(@"down"); 
    NSString *path = [[NSBundle bundleWithIdentifier:@"com.apple.UIKit"] pathForResource:@"Tock" ofType:@"aiff"]; 
    NSURL* url = [NSURL fileURLWithPath:path]; 
    SystemSoundID soundID; 
    AudioServicesCreateSystemSoundID((CFURLRef)objc_unretainedPointer(url), &soundID); 
    AudioServicesPlaySystemSound(soundID); 
    [sender transmitHandle]; 
    NSString *name = [sender restorationIdentifier]; 
    //I'm not sure what string you're trying to send to the send data method. 
    NSLog(@"Sending:%@ to sendData method", name); 
    [self sendData:name]; 


} 
+0

@estobart这样做,现在我就在/Users/fozbstudios/Desktop/fozbKEY/fozbKEY/classes/keyViewController.m:64:24:房产“名”的类型的对象__strong ID'未找到 – fozbstuios 2013-02-24 23:50:07

+0

我做了一些编辑。 – estobbart 2013-02-25 00:04:03

相关问题