Данные исчезают из 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.

0 ответов

Другие вопросы по тегам