Я буду повторно использовать пример данных из @PaulRougieux
x <- data_frame(i = c("a","b","c"), j = 1:3)
y <- data_frame(i = c("b","c","d"), k = 4:6)
z <- data_frame(i = c("c","d","a"), l = 7:9)
Вот короткое и сладкое решение, использующее purrr
и tidyr
library(tidyverse)
list(x, y, z) %>%
map_df(gather, key=key, value=value, -i) %>%
spread(key, value)
Во время выполнения Segue
ваш UIImageView не инициализируется, поэтому вы не можете назначить ему изображение, наилучшей практикой было бы передать UIImage
и инициализировать ваш UIImageView
в viewDidLoad
.
, поэтому в вашем классе ListPage
свойство типа UIImage
изменит вашу prepareForSegue
строку как
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "toBrowsePage" {
var itemToAdd = segue.destinationViewController as! ListPage
itemToAdd.image = browsingImage.image
}
}
в viewDidLoad
или viewDidAppear
вашего пункта назначения viewController
вы сделаете что-то вроде этого
browsingImage.image = image
IBOutlets недоступны в вашем текущем контроллере. Выходы еще не инициализированы, так как ваше второе представление еще не загружено.
Вместо этого вы можете создать переменную UIImage во втором viewController и присвоить ей значение в файле prepareForSegue.
И во втором режиме viewController viewDidLoad присвойте это значение вашей розетке ImageView.
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "toBrowsePage" {
let destination = segue.destinationViewController as! ListPage
destination.receivedImage = postingImage.image
}
}
В следующем viewController объявить переменную с именем
@IBOutlet weak var postingImage: UIImageView!
var receivedImage : UIImage?
В методе viewDidLoad
postingImage.image = receivedImage
Из вашего описания, browsingImage
находится в целевом viewController, поэтому в этой строке
itemToAdd.postingImage.image = browsingImage.image
Вы передаете изображение цели в исходное изображение
В prepareForSegue
вы не можете получить доступ к @IBOutlet
s контроллера точки назначения, потому что они еще не настроены. Вы должны назначить изображение свойству контроллера представления назначения, а затем переместить его на место в viewDidLoad
:
В контроллере представления источника:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "toBrowsePage" {
let dvc = segue.destinationViewController as! ListPage
dvc.newImage = postingImage.image
}
}
В режиме назначения контроллер:
class ListPage: UIViewController {
@IBOutlet weak var browsingImage: UIImageView!
var newImage: UIImage!
override func viewDidLoad() {
super.viewDidLoad()
browsingImage.image = newImage
}
}