UITextField и NSURL URLWithString

Я создал приложение для перевода в ios. Приложение использует API перевода Яндекса. Я следовал этому руководству: http://www.raywenderlich.com/5492/working-with-json-in-ios-5 Мой ViewController.m выглядит так (я достал ключ API):

#define kBgQueue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) //1

#import "ViewController.h"

@end
@interface NSDictionary(JSONCategories)
+(NSDictionary*)dictionaryWithContentsOfJSONURLString:(NSString*)urlAddress;
-(NSData*)toJSON;
@end

@implementation NSDictionary(JSONCategories)
+(NSDictionary*)dictionaryWithContentsOfJSONURLString:(NSString*)urlAddress
{
NSData* data = [NSData dataWithContentsOfURL: [NSURL URLWithString: urlAddress] ];
__autoreleasing NSError* error = nil;
id result = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
if (error != nil) return nil;
return result;
}

-(NSData*)toJSON
{
NSError* error = nil;
id result = [NSJSONSerialization dataWithJSONObject:self options:kNilOptions error:&error];
if (error != nil) return nil;
return result;
}
@end

@implementation ViewController

- (void)viewDidLoad
{
[super viewDidLoad];

dispatch_async(kBgQueue, ^{
   // NSData* data = [[NSData dataWithContentsOfURL: TranslateText] ];
    NSData*data = [NSURL URLWithString: [NSString stringWithFormat: @"https://translate.yandex.net/api/v1.5/tr.json/translate?key=apikeys&lang=en-es&text=%@", textfield.text]];
    [self performSelectorOnMainThread:@selector(fetchedData:) withObject:data waitUntilDone:YES];
});
}

- (void)fetchedData:(NSData *)responseData {
//parse out the json data
NSError* error;
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData //1
                                                     options:kNilOptions
                                                       error:&error];
NSArray* TranslatedText = [json objectForKey:@"text"]; //2

NSLog(@"Text that was translated: %@", TranslatedText); //3

// 1) Get the latest loan
//NSDictionary* ttext = [TranslatedText objectAtIndex:0];
  NSString* ttext = [TranslatedText objectAtIndex:0];


// 3) Set the label appropriately
humanReadble.text = [NSString stringWithFormat:@"%@",
                     //[ttext objectForKey:@"name"],
                     ttext];

}

@end`

Когда я запускаю приложение, я получаю сообщение об ошибке Thread 1: signal SIGABRT в этой строке кода: return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); Что я должен делать?


person Firelight    schedule 14.09.2013    source источник
comment
Пожалуйста, не делайте этого. Используйте асинхронные сетевые API (NSURLConnection). Они существуют по причине   -  person Mike Abdullah    schedule 25.09.2013


Ответы (1)


Ошибка в вашем коде - это использование там двоеточия. У вас должна быть линия...

[NSURL URLWithString: [NSString stringWithFormat: @"https://translate.yandex.net/api/v1.5/tr.json/translate?apikeyes&text=%@", textfield.text];

Кроме того, я не знаю, зачем вам делать #define. Возьмите информацию в методе обработки нажатия кнопки.

NSURL * translateURL = [NSURL URLWithString: [NSString stringWithFormat: @"https://translate.yandex.net/api/v1.5/tr.json/translate?apikeyes&text=%@", textfield.text];
person AdamG    schedule 14.09.2013
comment
Я изменил код в своем файле .m: `- (void)viewDidLoad { [super viewDidLoad]; dispatch_async(kBgQueue, ^{ NSData*data = [NSURL URLWithString: [NSString stringWithFormat: @translate.yandex.net/api/v1.5/tr.json/, textfield.text]]; [self executeSelectorOnMainThread:@selector(fetchedData:) withObject:data waitUntilDone: ДА]; }); } ` Когда я запускаю приложение, я получаю сообщение об ошибке Thread 1: signal SIGABRT в этой строке кода: ` return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));' Что я должен делать? - person Firelight; 15.09.2013
comment
я добавила в основной пост - person Firelight; 24.09.2013