Данные исчезают из UNIUrlConnection
Я пытаюсь передать данные из моего Objective-C в мой файл swift.
Недавно, когда я успешно соединил свой файл target c с моим файлом swift, я могу напечатать данные, полученные из UNIUrlConnection(что означает, что соединение между swift и target-c работает нормально).
Затем я создаю объект NSMutableDictionary и добавляю эти данные в NSMutableDictionary. Я хочу передать этот объект NSMutableDictionary в мой файл swift, чтобы я мог вывести их на свой viewController.
Однако NSMutableDictionary содержит правильные данные в UNIUrlConnection, но затем не содержит ничего из UNIUrlConnection. Таким образом, NSMutableDictionary, передаваемый в файл swift, всегда не будет содержать данных. Как я могу решить это?
Это моя цель c файлом.
#import <Foundation/Foundation.h>
#import <UNIRest.h>
#import "findByIngredients.h"
@implementation findByIngredients
-(NSMutableDictionary*) connectAPI:(NSString*) ingredients Number:(NSString*) number{
NSMutableDictionary *temp = [NSMutableDictionary dictionaryWithCapacity:10];
NSString* url = @"https://spoonacular-recipe-food-nutrition-v1.p.mashape.com/recipes/findByIngredients?fillIngredients=false";
if (![ingredients isEqual: @""]) {
NSString* ingre = @"&ingredients=";
ingre = [ingre stringByAppendingString:ingredients];
url = [url stringByAppendingString:ingre];
}
else {
NSString* ingre = @"&ingredients=<required>";
url = [url stringByAppendingString:ingre];
}
NSString* LL = @"&limitLicense=false";
url = [url stringByAppendingString:LL];
if (![number isEqual: @""]) {
NSString* numberOfReturn = @"&number=";
numberOfReturn = [numberOfReturn stringByAppendingString:number];
url = [url stringByAppendingString:numberOfReturn];
}
NSString* ranking = @"&ranking=1";
url = [url stringByAppendingString:ranking];
// These code snippets use an open-source library. http://unirest.io/objective-c
NSDictionary *headers = @{@"X-Mashape-Key": @"KEY", @"Accept": @"application/json"};
UNIUrlConnection *asyncConnection = [[UNIRest get:^(UNISimpleRequest *request) {
[request setUrl:url];
[request setHeaders:headers];
}] asJsonAsync:^(UNIHTTPJsonResponse *response, NSError *error) {
NSInteger code = response.code;
NSDictionary *responseHeaders = response.headers;
UNIJsonNode *body = response.body;
NSData *rawBody = response.rawBody;
if (rawBody) {
id allKeys = [NSJSONSerialization JSONObjectWithData:rawBody options:0 error:&error];
for (int i=0; i<[allKeys count]; i++) {
NSDictionary *arrayResult = [allKeys objectAtIndex:i];
// NSString* myNewString = [NSString stringWithFormat:@"%d", i];
NSString *key = [arrayResult objectForKey:@"id"];
NSString *value = [arrayResult objectForKey:@"title"];
[temp setObject:value forKey:key];
NSLog(@"id=%@",[arrayResult objectForKey:@"id"]);
NSLog(@"title=%@",[arrayResult objectForKey:@"title"]);
}
}
int size = [temp count];
NSLog(@"temp size is %d",size);
NSLog(@"successfully test API");
}];
// int size = [temp count];
// NSLog(@"temp size is %d",size);
return temp;
}
@end
Здесь размер temp в UNIUrlConnection является правильным. Но если я поставлю размер перед возвратом (который я закомментирую), он покажет 0, что неправильно.
Это мой быстрый файл.
@IBAction func search(_ sender: Any) {
let ingreArr = IngredientsText.text.components(separatedBy: [",", " "])
var ingre:String = ingreArr[0]
let sep:String = "%2C"
for (index,element) in ingreArr.enumerated() {
if (index >= 1) {
ingre = ingre + sep + element
}
}
let test = findByIngredients()
// test.connectAPI(ingre, number: NumberOfResults.text)
let result: Dictionary = test.connectAPI(ingre, number: NumberOfResults.text) as Dictionary
let num:Int = result.count
print(num)
}
Число 0.