2017-02-13 6 views
1

Я использую контроллер панели вкладок, и я пытаюсь получить доступ к настройкам по умолчанию из моего другого контроллера отображения панели вкладок. Я попробовал это в другой функции, также показанной ниже, и работает отлично, но по какой-то причине он здесь не работает. Он выдает ошибку всякий раз, когда это вызывается: FirstViewController().defaults. Кто-нибудь знает, почему это происходит?'UIViewController' не является подтипом 'ViewController'

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{ 

      let cell = TableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as UITableViewCell 
      TableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell") 
      var photo: Photo 
      let description = FirstViewController().description 

      if(searchController.isActive){ 
       photo = self.filteredPhotos[indexPath.row] 
      } else { 
       photo = self.photosArray[indexPath.row] 
      } 
      cell.textLabel!.text = photo.name 
      if(FirstViewController().defaults.data(forKey: photo.name + "image") as UIImage != nil){ 
       cell.imageView?.image = FirstViewController().defaults.data(forKey: photo.name + "image") as UIImage 
      } 
      print(photo.name) 
      print("TableView2Finished") 
      return cell 
     } 
+1

Добро пожаловать на переполнение стека! Можете ли вы рассказать о том, как ваш код «не работает»? Что вы ожидали, и что на самом деле произошло? Если вы получили исключение/ошибку, опубликуйте строку, в которой она произошла, и сведения об исключении/ошибке. Пожалуйста, отредактируйте эти данные или мы не сможем помочь. – Christopher

+0

Вы пытаетесь получить доступ к значениям по умолчанию в классе FirstViewController, а не в экземпляре FirstViewController. Это намеренно? Вы действительно понимаете, в чем разница? – Gruntcakes

ответ

0

Вам нужно обратиться к экземпляру FirstViewController, а не к определению фактического класса.

Вместо этого:

if(FirstViewController().defaults.data(forKey: photo.name + "image") as UIImage != nil) { 
    cell.imageView?.image = FirstViewController().defaults.data(forKey: photo.name + "image") as UIImage 
} 

Попробуйте это:

let storyboard = UIStoryboard(name: "Main", bundle: nil) 
let firstViewController = storyboard.instantiateViewController(withIdentifier: "FirstViewController") as! FirstViewController 
if(firstViewController.defaults.data(forKey: photo.name + "image") as UIImage != nil) { 
    cell.imageView?.image = firstViewController.defaults.data(forKey: photo.name + "image") as UIImage 
} 

Убедитесь, что вы установили Storyboard Identifier для FirstViewController, так что вы можете ссылаться на него идентификатором в коде.

EDIT # 1:

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

В своем первом контроллере представления:

let defaults = UserDefaults.standard 
defaults.set(photo.name, forKey: "FirstImage") 

В контроллере просмотра таблицы:

let defaults = UserDefaults.standard 
if let myImage = defaults.object(forKey: "FirstImage") as? String { 
    cell.imageView?.image = UIImage(named: myImage!) 
}