2015-07-12 2 views
9

Я создаю приложение просмотра страницы. Я написал код для ViewController:Нельзя присваивать свойству: «self» неизменен

import UIKit 

class ViewController: UIViewController { 

var pageViewController : UIPageViewController! 
var pageTitles : NSArray! 
var pageImages : NSArray! 

@IBAction func restartAction(sender: AnyObject) {} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.pageTitles = NSArray(objects: "This Is Page One!", "This Is Page Two!") 
    self.pageImages = NSArray(objects: "page1", "page2") 

    self.pageViewController = self.storyboard?.instantiateViewControllerWithIdentifier("PageViewController") as! UIPageViewController 

    self.pageViewController.dataSource = self // <–– Error 

    let startVC = self.viewControllerAtIndex(0) as ContentViewController 
    let viewControllers = NSArray(object: startVC) 

    self.pageViewController.setViewControllers(viewControllers as? [UIViewController], direction: .Forward, animated: true, completion: nil) 

    self.pageViewController.view.frame = CGRectMake(0, 30, self.view.frame.width, self.view.frame.height - 60) 

    self.addChildViewController(self.pageViewController) 
    self.view.addSubview(self.pageViewController.view) 
    self.pageViewController.didMoveToParentViewController(self) 

} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

func viewControllerAtIndex(index: Int) -> ContentViewController { 
    if ((self.pageTitles.count == 0) || (index >= self.pageTitles.count)) { 
     return ContentViewController() 
    } 

    let vc : ContentViewController = self.storyboard?.instantiateViewControllerWithIdentifier("ContentViewController") as! ContentViewController 

    vc.imageFile = self.pageImages[index] as! String 
    vc.titleText = self.pageTitles[index] as! String 
    vc.pageIndex = index 

    return vc 
} 



func pageViewController(pageViewController: UIPageViewController, viewcontrollerBeforeViewController viewController: UIViewController) ->UIViewController? { 

    let vc = viewController as! ContentViewController 
    var index = vc.pageIndex as Int 

    if index == 0 || index == NSNotFound { 
     return nil 
    } 

    index-- 
    return self.viewControllerAtIndex(index) 

} 

func pageViewController(pageViewController: UIPageViewController, viewcontrollerAfterViewController viewController: UIViewController) ->UIViewController? { 

    let vc = viewController as! ContentViewController 
    var index = vc.pageIndex as Int 

    if index == NSNotFound { 
     return nil 
    } 

    index++ 

    if index == self.pageTitles.count { 
     return nil 
    } 

    return self.viewControllerAtIndex(index) 

} 

} 

Но я получаю ошибку на этой линии self.pageViewController.dataSource = self. Ошибка:

Невозможно присвоить свойство: «я» неизменен

Я не уверен, почему сам является непреложной и как это исправить. Если кто-то может помочь, спасибо заранее.

+2

Угадай, но ... Помогает ли это, если вы укажете, что ваш 'ViewController' является' UIPageViewControllerDataSource' в его объявлении класса? –

ответ

2

В стрижа вам необходимо позвонить self.pageViewController.setDelegate(self)

Делегаты были объявлены как методы, а не свойства в некоторых случаях.

0

Я думаю, что компилятор не является очень полезным здесь - попробуйте объявить контроллер в качестве следующего протокола источника данных и посмотреть, если это исправляет эту странную ошибку

class ViewController: UIViewController, UIPageViewControllerDataSource { etc 
Смежные вопросы