Когда вы используете encodeWithCoder: и initWithCoder: на iPhone?

Вот мой быстрый вариант чистого Javascript и простой галереи. Вы можете легко адаптировать его! Не стесняйтесь спрашивать разъяснения!

var gallery = document.getElementById("gallery");
var imgs = gallery.children;

var modal = document.getElementById("modal");
var modal_img = modal.children[0];

for (var i = 0; i < imgs.length; i++) {
  imgs[i].onclick = function() {
    modal_img.src = this.src;
    modal.classList.add("show");
  }
}

// Close when clicking anywhere on modal not on img
modal.onclick = function(e) {
  if (e.target !== this)
    return;
    
  modal.classList.remove("show");
}
#gallery img {
  width: 75px;
  
  cursor: pointer;
}

#modal {
  display: none;
  
  text-align: center;
}

#modal.show {
  display: block;
}

#modal img {
  width: 250px;
  
  position: relative;
  z-index: 3;
}

#modal:before {
  content: "";
  position: fixed;
  top: 0; left: 0; right: 0; bottom: 0;
  z-index: 2;
  
  background-color: rgba(0,0,0,.8);
}
<div id="gallery">
  <img src="https://www.w3schools.com/w3css/img_lights.jpg" />
  <img src="https://cdn.pixabay.com/photo/2016/06/18/17/42/image-1465348_960_720.jpg" />
</div>
<div id="modal"><img src="" /></div>

8
задан Lorenzo B 25 June 2012 в 13:23
поделиться

4 ответа

initWithCoder: используется ОС при отмене архивирования файлов XIB; если вы посмотрите внимательно, вы увидите, что initWithFrame: не вызывается для представлений, которые вы создаете в своей XIB; вместо них будет вызван initWithCoder: .

10
ответ дан 5 December 2019 в 06:24
поделиться

Пользовательские настройки по умолчанию - это, в основном, список свойств. Списки свойств аналогичны JSON и могут хранить только определенные типы данных - NSString, NSNumber, NSData, NSDate, NSArray, NSDictionary. Если вы попытаетесь сохранить что-либо еще по умолчанию для пользователя, вы получите исключение. Списки свойств также не могут обрабатывать произвольные графы объектов, только деревья.

Вы всегда можете взять свое пользовательское состояние и преобразовать его в структуру данных, совместимую со списком свойств, а затем сохранить ее по умолчанию; но тогда ты

9
ответ дан 5 December 2019 в 06:24
поделиться

NSCoder является стандартным методом какао для реализации сериализации. Подробности см. В руководстве по программированию архивов и сериализаций Apple для какао .

6
ответ дан 5 December 2019 в 06:24
поделиться

Я использую NSCoder всякий раз, когда у меня есть какие-то сложные данные для хранения, которые мне никогда не придется редактировать вручную. Например, мое приложение Converter хранит курсы обмена валют, загруженные из Интернета, в архив NSCoder. Тем не менее, это единственное, что хранится в таком архиве: определения юнитов, которые изменяются только вручную, хранятся в серии файлов plist в комплекте приложений, а такие вещи, как последние выбранные юниты и значения, хранятся в NSUserDefaults.

Конвертер my app хранит курсы обмена валют, загруженные из Интернета, в архив NSCoder. Тем не менее, это единственное, что хранится в таком архиве: определения юнитов, которые изменяются только вручную, хранятся в серии файлов plist в комплекте приложений, а такие вещи, как последние выбранные юниты и значения, хранятся в NSUserDefaults.

Конвертер my app хранит курсы обмена валют, загруженные из Интернета, в архив NSCoder. Тем не менее, это единственное, что хранится в таком архиве: определения юнитов, которые изменяются только вручную, хранятся в серии файлов plist в комплекте приложений, а такие вещи, как последние выбранные юниты и значения, хранятся в NSUserDefaults.

1
ответ дан 5 December 2019 в 06:24
поделиться