0

So Im using the asyncsocket library https://github.com/caydenliew/AsyncSocket. and I have a button that sends a string to a server when pressed. No errors are present, but I get the following exception:

*** 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

Here is 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

and .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

What am I doing wrong???

fozbstuios
  • 373
  • 4
  • 8
  • 17

1 Answers1

0

An IBAction's sender is the button which was pressed. sendData is a method of the controller. You're sending sendData to the button which was pressed. Change sender to self. I'm not sure what string you're trying to send to the send data method, but I'm not sure if your button has a property call restorationIdentifier.

- (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];


}
estobbart
  • 1,137
  • 12
  • 28
  • @estobart did that now I'm getting /Users/fozbstudios/Desktop/fozbKEY/fozbKEY/classes/keyViewController.m:64:24: Property 'name' not found on object of type '__strong id' – fozbstuios Feb 24 '13 at 23:50