Я скосил один из моих первых объектов. Цель объекта - отправить текстовое сообщение, которое есть. Однако я вызываю его из второго 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);
}];