Как насчет этого решения?
Просто добавьте атрибут данных «data-type = editable» в тег изображения следующим образом:
И сценарий к вашему проекту выкл ...
function init() {
$("img[data-type=editable]").each(function (i, e) {
var _inputFile = $('')
.attr('type', 'file')
.attr('hidden', 'hidden')
.attr('onchange', 'readImage()')
.attr('data-image-placeholder', e.id);
$(e.parentElement).append(_inputFile);
$(e).on("click", _inputFile, triggerClick);
});
}
function triggerClick(e) {
e.data.click();
}
Element.prototype.readImage = function () {
var _inputFile = this;
if (_inputFile && _inputFile.files && _inputFile.files[0]) {
var _fileReader = new FileReader();
_fileReader.onload = function (e) {
var _imagePlaceholder = _inputFile.attributes.getNamedItem("data-image-placeholder").value;
var _img = $("#" + _imagePlaceholder);
_img.attr("src", e.target.result);
};
_fileReader.readAsDataURL(_inputFile.files[0]);
}
};
//
// IIFE - Immediately Invoked Function Expression
// https://stackoverflow.com/questions/18307078/jquery-best-practises-in-case-of-document-ready
(
function (yourcode) {
"use strict";
// The global jQuery object is passed as a parameter
yourcode(window.jQuery, window, document);
}(
function ($, window, document) {
"use strict";
// The $ is now locally scoped
$(function () {
// The DOM is ready!
init();
});
// The rest of your code goes here!
}));
Я скачал ваш проект.
Вы получаете ошибку
'NSUnknownKeyException', причина: '[
setValue: forUndefinedKey:]: этот класс не соответствует кодированию значения ключа для строки ключа.'
Это вызвано Вторым
контроллером представления в MainWindow.xib
, имеющим класс UIViewController
вместо SecondView
. Переход на правильный класс решает проблему.
Между прочим, в Objective-C использовать имена типа «строка» - плохая практика. Это вызывает конфликт именования во время выполнения. Избегайте их даже в разовых приложениях. Коллизии имен очень сложно отследить, и вы не хотите тратить время зря.
Другая возможная причина этой ошибки: при копировании и вставке элементов из одного контроллера в другой Xcode каким-то образом сохраняет эту ссылку на исходный контроллер даже после редактирования и повторной привязки этого элемента к новому контроллеру.
Другая возможная причина этой ошибки:
Плохой выход.
Вы либо удалили , либо переименовали имя торговой точки в файле .h
.
Удалите его в инспекторе подключений файла .xib
или .storyboard
.
IBOutlet
только один раз, метка IBOutlet
для вашего ivar не нужна. UIViewController
? В какой-то момент вы должны позвонить [SecondView initWithNibName: @ "yourNibName" bundle: nil];
Еще одна «несовместимая» проблема, которую я обнаружил, заключалась в том, что мне по какой-то причине удалось получить две копии класса.
Я добавлял ключи не к той копии. Интерфейсный разработчик все еще видел ключи и позволял мне подключиться к ним, но во время выполнения он использовал другую копию класса, у которой не было новых ключей.
Чтобы найти «правильную» копию, я использовал команду XCode, щелкнув имя класса в другом месте, чтобы перейти к правильной копии, затем я удалил плохие неиспользуемые копии (после переноса моих правок из неиспользованной копии первый).
Мораль истории: дублировать файлы классов - это плохо.
Я получил ту же ошибку, когда я вручную загрузил представление из пера. Оказывается, что я забыл устанавливать владельца представления.
Для, например, Если Вы загружаете представление следующим образом,
let view = Bundle.main.loadNibNamed("MyNibFileName",
owner: nil,
options: nil)?.first as! UIView
и затем добавляете IBOutlet, на IBOutlet нельзя сослаться, и приложение откажет с вышеупомянутой ошибкой.
Зафиксируйте: Присвойте владельцу для представления.
let view = Bundle.main.loadNibNamed("MyNibFileName",
owner: self,
options: nil)?.first as! UIView
Действительно глупая ошибка со мной. Таким образом, я решил совместно использовать здесь, надеяться, что это поможет другому люди как я.
у меня есть другой подмодуль в моем проекте, и я называю новый класс с тем же именем с другим классом в основном модуле, мой новый класс НЕ имеют xib файл (100% кодом), но другой класс в основном модуле имеют xib файл. Я думаю XCode, связанный неправильно новый класс с xib файлом в основном модуле.
, Что причина катастрофического отказа с сообщением:
this class is not key value coding-compliant for the key tableView.