2013-09-14 3 views
0

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

#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` 

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

+0

Пожалуйста, не делайте этого. Используйте асинхронные сетевые API ('NSURLConnection'). Они существуют по какой-то причине –

ответ

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]; 
+0

Я изменил код в моем .m-файле: ' - (void) viewDidLoad { {super viewDidLoad]; dispatch_async (kBgQueue,^{ NSData * data = [NSURL URLWithString: [NSString stringWithFormat: @ "https://translate.yandex.net/api/v1.5/tr.json/translate?apikeyes&text=%@" , textfield.text]]; [self performSelectorOnMainThread: @selector (fetchedData :) withObject: data waitUntilDone: YES]; }); } ' Когда я запустить приложение, я получаю сообщение об ошибке ** Тема 1: сигнал SIGABRT ** на этой строке кода: ' вернуть UIApplicationMain (ARGC, ARGV, ноль, NSStringFromClass ([AppDelegate класс])) ;» Что мне делать? – Firelight

+0

Не могли бы вы опубликовать это как отредактировать в главном сообщении? – AdamG

+0

Я добавил его на главный пост – Firelight

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