Вот фильтр действий для проверки нулевых моделей или недопустимых моделей. (поэтому вам не нужно записывать чек на каждое действие)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http.Controllers;
using System.Web.Http.Filters;
namespace Studio.Lms.TrackingServices.Filters
{
public class ValidateViewModelAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (actionContext.ActionArguments.Any(kv => kv.Value == null)) {
actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Arguments cannot be null");
}
if (actionContext.ModelState.IsValid == false) {
actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest, actionContext.ModelState);
}
}
}
}
Вы можете зарегистрировать его по всему миру:
config.Filters.Add(new ValidateViewModelAttribute());
Или использовать его по требованию по классам / действиям
[ValidateViewModel]
public class UsersController : ApiController
{ ...
Я встретился с той же проблемой и искал подобную проблему вокруг сети тогда, я получил одно решение, которым можно избавиться от этого катастрофического отказа
приложение Завершения *** из-за неперехваченного исключения 'NSInvalidUnarchiveOperationException', причина: 'Не мог инстанцировать класса, названного _UITextLayoutView, потому что никакой класс, названный _UITextLayoutView, не был найден; класс должен быть определен в исходном коде или связан в из библиотеки (удостоверьтесь, что класс является частью корректной цели)',
, решение
Переходит к поиску Установки Сборки "DEAD_CODE_STRIPPING" и установило, это ни к КАКОМУ
DEAD_CODE_STRIPPING = NO
Тогда
создает файлы UITextViewWorkaround
UITextViewWorkaround.h
#import <Foundation/Foundation.h>
@interface UITextViewWorkaround : NSObject
+ (void)executeWorkaround;
@end
UITextViewWorkaround. m
#import "UITextViewWorkaround.h"
#import <objc/runtime.h>
@implementation UITextViewWorkaround
+ (void)executeWorkaround {
if (@available(iOS 13.2, *)) {
}
else {
const char *className = "_UITextLayoutView";
Class cls = objc_getClass(className);
if (cls == nil) {
cls = objc_allocateClassPair([UIView class], className, 0);
objc_registerClassPair(cls);
#if DEBUG
printf("added %s dynamically\n", className);
#endif
}
}
}
@end
, выполняют его в делегате приложения
#import "UITextViewWorkaround.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[UITextViewWorkaround executeWorkaround];
return yes;
}
Компиляция код, и у Вас будет запущенное приложение:)
DEAD_CODE_STRIPPING = NO
В настройках сборки проекта фиксирует его.
Более быстрая фиксация:
///Substitute class for _UITextLayoutView bug
class FixedTextView: UITextView {
required init?(coder: NSCoder) {
if #available(iOS 13.2, *) {
super.init(coder: coder)
}
else {
let rect = CGRect(origin: .zero, size: CGSize(width: 100, height: 44*3))
super.init(frame: rect, textContainer: nil)
}
}
}
Добавляют этот код где-нибудь и затем заменяют все экземпляры раскадровки к FixedTextView
.
Примечание: Вы потеряете любые атрибуты, созданные в раскадровках. Это могло иметь серьезные последствия (например, делегат, устанавливающий, размер, и т.д.)
Xcode 11.2 , Откатывают к предыдущей версии Xcode выпуска от:
пути, что необходимо использовать Safari для загрузки его и Вы должны сначала вход в систему портала разработчика Apple .
можно найти все другие версии XCode и другую ссылку ресурсов (включая версии выпуска и бета-версии) здесь в https://developer.apple.com/download/more
, Это - очень трудное но рабочее обходное решение. Замените весь UITextView
с в [1 122] раскадровка с и Xib с с чистый код версия.
Примечание, что этот ошибка подтверждена Штат Apple edford
Загруженный Xcode 11.1 от https://developer.apple.com/download/more / Переключение назад от 11,2 до 11,1 зафиксировал катастрофический отказ.
кроме того, для меня даже с Xcode 11.2, когда я обновил свой iPhone до 13,2, который зафиксировал катастрофический отказ.
Изменение к лучшему @garafajon ответ. Для меня это работает в большинстве случаев.
///Substitute class for _UITextLayoutView bug
class FixedTextView: UITextView {
required init?(coder: NSCoder) {
if #available(iOS 13.2, *) {
super.init(coder: coder)
}
else {
super.init(frame: .zero, textContainer: nil)
self.autoresizingMask = [.flexibleWidth, .flexibleHeight]
self.contentMode = .scaleToFill
self.isScrollEnabled = false // causes expanding height
// Auto Layout
self.translatesAutoresizingMaskIntoConstraints = false
self.font = UIFont(name: "HelveticaNeue", size: 18)
}
}
}
Как "быстрая" фиксация можно добавить UITextView
непосредственно от кода а не через IB. По крайней мере, это работало на меня. Хотя с моей точки зрения лучше откатывать к предыдущему XCode/ожидать для нового.
Я принял решение хана Obj-C Swift:
import UIKit
@objc
class UITextViewWorkaround : NSObject {
static func executeWorkaround() {
if #available(iOS 13.2, *) {
} else {
let className = "_UITextLayoutView"
let theClass = objc_getClass(className)
if theClass == nil {
let classPair: AnyClass? = objc_allocateClassPair(UIView.self, className, 0)
objc_registerClassPair(classPair!)
}
}
}
}
Спасибо Aftab!
Это - ошибка с Xcode 11.2. Разделенные на подклассы Textviews отказывают на всех устройствах, не имеющих neweset сборку iOS (13.2) установленный. Вы, вероятно, лучше не создаете выпуск с той сборкой.
Вы можете теперь:
На основе идеи Aftab Muhammed Khan и с помощью John Nimis я просто протестировал следующий код.
Никакое изменение в необходимых файлах раскадровки!!!
Отредактированный мой файл AppDelegate.swift и добавил, что этот класс
//******************************************************************
// MARK: - Workaround for the xCode 11.2 bug
//******************************************************************
class UITextViewWorkaround: NSObject {
// --------------------------------------------------------------------
// MARK: Singleton
// --------------------------------------------------------------------
// make it a singleton
static let unique = UITextViewWorkaround()
// --------------------------------------------------------------------
// MARK: executeWorkaround()
// --------------------------------------------------------------------
func executeWorkaround() {
if #available(iOS 13.2, *) {
NSLog("UITextViewWorkaround.unique.executeWorkaround(): we are on IOS 13.2+ no need for a workaround")
} else {
// name of the missing class stub
let className = "_UITextLayoutView"
// try to get the class
var cls = objc_getClass(className)
// check if class is available
if cls == nil {
// it's not available, so create a replacement and register it
cls = objc_allocateClassPair(UIView.self, className, 0)
objc_registerClassPair(cls as! AnyClass)
#if DEBUG
NSLog("UITextViewWorkaround.unique.executeWorkaround(): added \(className) dynamically")
#endif
}
}
}
}
и в призыве делегата "didFinishLaunchingWithOptions" называет обходное решение
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
// this is the workaround for xCode 11.2
UITextViewWorkaround.unique.executeWorkaround()
}
(и это может использоваться для публикации к App Store)
, Переходят в https://developer.apple.com/download / . Загрузите 11.2.1 Гм семени XCode
Можно пойти для загрузки последней бета-версии XCode (11.2.1 Гм) с веб-сайта разработчика Apple.
Hope эта справка рџ ‰
Я использовал успешное обходное решение, но это было болезненно. Это - процесс, за которым я следовал:
TextView
. В моем случае: <textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" textAlignment="natural" translatesAutoresizingMaskIntoConstraints="NO" id="782-j1-88c" customClass="LCAnsiConsoleTextView">
<rect key="frame" x="16" y="20" width="343" height="589"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<fontDescription key="fontDescription" name="Menlo-Regular" family="Menlo" pointSize="12"/>
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
</textView>
id
(в моем случае: id="782-j1-88c"
) @implementation FixedTextView
- (id) initWithCoder:(NSCoder*)coder
{
if ([[NSProcessInfo processInfo] isOperatingSystemAtLeastVersion:(NSOperatingSystemVersion){13,2,0}])
self = [super initWithCoder:coder];
else {
self = [super initWithFrame:CGRectMake(16, 3, 343, 605)];
self.editable = YES;
self.selectable = YES;
self.insetsLayoutMarginsFromSafeArea = YES;
self.clipsToBounds = YES;
self.clearsContextBeforeDrawing = YES;
self.autoresizesSubviews = YES;
self.contentMode = UIViewContentModeScaleToFill;
self.scrollEnabled = YES;
self.userInteractionEnabled = YES;
self.multipleTouchEnabled = YES;
self.translatesAutoresizingMaskIntoConstraints = NO;
self.font = [UIFont fontWithName:@"Menlo-Regular" size:12.0];
}
return self;
}
- (id) initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
[self xibSetup];
[self initView];
/*
<constraint firstItem="75C-lt-YtE" firstAttribute="top" secondItem="782-j1-88c" secondAttribute="bottom" constant="8" symbolic="YES" id="8SH-5l-FAs"/>
<constraint firstItem="782-j1-88c" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leadingMargin" id="Mve-aZ-HCe"/>
<constraint firstItem="782-j1-88c" firstAttribute="leading" secondItem="75C-lt-YtE" secondAttribute="leading" id="dPG-u3-cCi"/>
<constraint firstItem="782-j1-88c" firstAttribute="trailing" secondItem="iN0-l3-epB" secondAttribute="trailingMargin" id="sjT-0Q-hNj"/>
<constraint firstItem="782-j1-88c" firstAttribute="top" secondItem="vUN-kp-3ea" secondAttribute="top" id="vic-vZ-osR"/>
*/
[self.command.topAnchor constraintEqualToAnchor:self.console.bottomAnchor constant:8].active = YES;
[self.console.leadingAnchor constraintEqualToAnchor:self.layoutMarginsGuide.leadingAnchor].active = YES;
[self.console.leadingAnchor constraintEqualToAnchor:self.command.leadingAnchor].active = YES;
[self.console.trailingAnchor constraintEqualToAnchor:self.trailingAnchor].active = YES;
[self.console.topAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.topAnchor].active = YES;
}
return self;
}
Выполнение этого устранило проблему для меня без потери в желаемой функциональности. К счастью, у меня был только один UITextView
для замены. Иначе это становится ненадежным.
У меня была та же проблема, я просто обновил свой Xcode 11.2 до 11.2.1, это хорошо работало.
После обновления я протестировал то же на iOS 13 и iOS 12, и это хорошо работало.
Недостаточно Репутации для добавления комментария но я нашел, что даже после обновления XCode, все еще испытывал этот катастрофический отказ. ПОКА Я НЕ ПЕРЕЗАПУСТИЛ СВОЙ КОМПЬЮТЕР!
, Если вышеупомянутые решения не работают мгновенно, попытайтесь перезапустить XCode и также Ваш компьютер.