У меня есть следующий код для метода run, который возвращает UIImage
, созданный из UIView
, созданного в отдельном файле класса UIView
. FlagMarkerView
является отдельным подклассом UIView
и упоминается здесь. Проблема в том, что строка FlagMarker *markerView...
выдает следующую ошибку средства проверки основного потока и приводит к сбою приложения.
UIView.init (кодер :) должен использоваться из основного потока.
Код, используемый для работы как есть, но больше не работает, поскольку я обновил проект до цели iOS 11.
Я попытался обернуть вызов FlagMarkerView
в dispatch_async(dispatch_get_main_queue(), ^{});
, но это не сработает, потому что оно не принимается возвращением UIImage
в методе. Я также попытался использовать метод -(void)
вместо возврата UIImage
, но это связано со сложностью моего проекта.
Есть ли способ, которым я могу создать newMarkerImage
в - (void)updateMyFlagsWitAlert:
и использовать dispatch_async(dispatch_get_main_queue(), ^{
для FlagMarkerView
, чтобы newMarkerImage
можно было создать в строке от markerImage
.
- (void)updateMyFlagsWitAlert:(BOOL)isAllowed{
for (AGSGraphic *graphic in weakSelf.flagOverlay.graphics) {
FlagModel *flagToUpdate = graphic.attributes[@"flag"];
UIImage *newMarkerImage =
[weakSelf markerImageForFlag:flagToUpdate withDetail:detail];
}
}
- (UIImage *)markerImageForFlag:(FlagModel *)flag withDetail:(BOOL)withDetail {
// This line crashes app
FlagMarkerView *markerView = [[[NSBundle mainBundle] loadNibNamed:@"FlagMarkerView" owner:self options:nil] objectAtIndex:0];
[markerView setFlag:flag];
UIImage *markerImage = [markerView imageWithDetail:withDetail];
[markerView layoutIfNeeded];
return markerImage;
}