2014-09-13 2 views
0

Я скосил один из моих первых объектов. Цель объекта - отправить текстовое сообщение, которое есть. Однако я вызываю его из второго UIViewController в ViewDidLoad и все еще висит в переходе Segue. Поэтому я знаю, что мне нужно получить его асинхронно, но, читая некоторые другие потоки, они подразумевали, что правильный способ обойти это сделать его «AppDelegate Object», поэтому я бы предположил, что мне нужно будет вызвать объект из AppDelegate, но я не совсем уверен, как это сделать, поскольку я не работал с этим в некоторых учебниках, которые я делаю, и, кроме того, это правильный способ использовать мой объект?Правильный способ асинхронного вызова объекта?

инициализации объекта из моего контроллера

Twilio *twilio = [[Twilio alloc] init]; 
    [twilio sendMessage: self.phoneNumber: [self getRandomNumberBetween:1000 to:9999]]; 

Заголовочный файл

#import <Foundation/Foundation.h> 

@interface Twilio : NSObject 

@property (strong, nonatomic) NSString *TwilioSID; 
@property (strong, nonatomic) NSString *TwilioSecret; 
@property (strong, nonatomic) NSString *FromNumber; 
@property (strong, nonatomic) NSString *ToNumber; 
@property (strong, nonatomic) NSString *Message; 

-(id)init; 
-(id)sendMessage:(NSString *)phoneNumber :(NSString *)message; 

@end 

файл Реализация

#import "Twilio.h" 

@implementation Twilio 

-(id)init { 
    self = [super init]; 

    if(self) { 
     // Twilio Common constants 
     self.TwilioSID = @"A....3"; 
     self.TwilioSecret = @"e...8"; 
     self.FromNumber = @"5...2"; 
     self.ToNumber = nil; 
     self.Message = nil; 
    } 

    return self; 
} 

-(id)sendMessage:(NSString *)phoneNumber :(NSString *)message 
{ 
    NSLog(@"Sending request."); 

    self.ToNumber = phoneNumber; 
    self.Message = message; 

    // Build request 
    NSString *urlString = [NSString stringWithFormat:@"https://%@:%@@api.twilio.com/2010-04-01/Accounts/%@/SMS/Messages", self.TwilioSID, self.TwilioSecret, self.TwilioSID]; 
    NSURL *url = [NSURL URLWithString:urlString]; 
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
    [request setURL:url]; 
    [request setHTTPMethod:@"POST"]; 

    // Set up the body 
    NSString *bodyString = [NSString stringWithFormat:@"From=%@&To=%@&Body=%@", self.FromNumber, self.ToNumber, self.Message]; 
    NSData *data = [bodyString dataUsingEncoding:NSUTF8StringEncoding]; 
    [request setHTTPBody:data]; 
    NSError *error; 
    NSURLResponse *response; 
    NSData *receivedData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 

    // Handle the received data 
    if (error) { 
     NSLog(@"Error: %@", error); 
    } else { 
     NSString *receivedString = [[NSString alloc]initWithData:receivedData encoding:NSUTF8StringEncoding]; 
     NSLog(@"Request sent. %@", receivedString); 
    } 
    return self.Message; 
} 
@end 

вид Обновленный

С рекомендацией ниже я изменил мою реализацию объекта следующим образом:

//NSError *error; 
    //NSURLResponse *response; 
    //NSData *receivedData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 

    [NSURLConnection sendAsynchronousRequest:request queue:self.queue completionHandler:^(NSURLResponse *response, NSData *data, NSError 
*error) { 

      // Handle the received data 
      if (error) { 
       NSLog(@"Error: %@", error); 
      } else { 
       NSString *receivedString = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; 
       NSLog(@"Request sent. %@", receivedString); 
      } 
      NSLog(@"%@",response); 
     }]; 

ответ

Смежные вопросы