Не удалось создать собственный экземпляр типа 'FWSImageRepo'. нативный класс не был загружен
Я пытаюсь связать нативный фреймворк iOS, который использует AFNetworking
Изначально я строю его как прототип, чтобы перенести часть IP-адреса ObjC моей компании, чтобы он был связан с Xamarin и в будущем.
Я начал с создания простого класса, который загружает котят с помощью AFNetworking в UIImageView
Заголовочный файл:
#import <UIKit/UIKit.h>
@interface FWSImageRepo : NSObject
+(UIImageView *)imageViewFromURLString:(NSString *)urlString;
@end
Реализация
@implementation FWSImageRepo
+(UIImageView *)imageViewFromURLString:(NSString *)urlString{
UIImageView *imageView = [[UIImageView alloc] init];
NSURL *imageUrl= [NSURL URLWithString:@"http://www.pets4homes.co.uk/images/articles/1334/large/6-health-issues-to-watch-for-in-young-kittens-52f62cff5cabb.jpg"];
if(imageUrl != nil) {
[imageView setImageWithURL:imageUrl];
}
return imageView;
}
@end
Я создал цель компилятора фреймворка и скопировал фреймворк в проект Xamarin iOS. Я использовал Objective Sharpie для создания привязок ниже
// @interface FWSImageRepo : NSObject
[BaseType(typeof(NSObject))]
interface FWSImageRepo
{
// +(UIImageView *)imageViewFromURLString:(NSString *)urlString;
[Static]
[Export("imageViewFromURLString:")]
UIImageView ImageViewFromURLString(string urlString);
}
Все они связаны, как указано в binding project
инфраструктура связана как нативная ссылка, а на проект привязок ссылается одностраничное приложение Xamarin для iOS.
теперь простая инициализация класса var fwrepo = new FWSImageRepo();
указывает на то, что фреймворк вообще не нравится проекту. ошибка не меняется, даже если я не связываю фреймворки в проекте bindings
Could not create an native instance of the type 'FWSImageRepo': the native class hasn't been loaded. It is possible to ignore this condition by setting ObjCRuntime.Class.ThrowOnInitFailure to false.
Есть ли причина проверить, что происходит? Я перепробовал все и исчерпал свой поиск в Интернете. Насколько я искал, нигде нет примеров этого требования, и практически нет направления. Я пробовал решения от других, сталкивающихся с теми же проблемами. как мне искать где я ошибся?
Вот ссылка на созданные мной проекты. https://drive.google.com/open?id=0B2f9RlRxZKoZcElIRkpLZnF6WVU
2 ответа
Это не совсем решает проблему, но благодаря @chris, заставляющему меня понять, что проблема заключается в отсутствии загрузки класса, решение было на самом деле в изменении настроек сборки iOS для соответствия следующим вариантам
Я все еще могу получить доступ к методу статически, как показано ниже:
// @interface FWSImageRepo : NSObject
[BaseType(typeof(NSObject))]
public interface FWSImageRepo
{
// +(UIImageView *)imageViewFromURLString:(NSString *)urlString;
[Static]
[Export("imageViewFromURLString:")]
UIImageView ImageViewFromURLString(string urlString);
}
и получить к нему доступ, как это
var imageview = FWSImageRepo.ImageViewFromURLString("");
Любая идея, почему я не могу использовать его в качестве экземпляра (я удалил атрибут [Static]?
Не удалось создать собственный экземпляр типа "FWSImageRepo": собственный класс не был загружен. Можно игнорировать это условие, установив для ObjCRuntime.Class.ThrowOnInitFailure значение false.
Это говорит о том, что соответствующая библиотека не была загружена. Я бы прогулялся по документации:
https://developer.xamarin.com/guides/ios/advanced_topics/native_interop/
чтобы определить, где настройки проекта не загружаются в нативную библиотеку.