2015-10-26 52 views
0

我試圖創建一個SLComposeViewController的子類,使它更容易在我的情況下使用。當我嘗試創建一個required init並調用super.init(forServiceType: SLServiceTypeFacebook)我收到以下錯誤:Subclassing SLComposeViewController指定的初始化程序錯誤

Must call a designated initializer of the superclass 'SLComposeViewController'

但是當我檢查docs,沒有什麼表明有一個指定初始化 - 所以我去了它的超UIViewController指定的初始值爲super.init(nibName: String?, bundle: NSBundle?)。但是實現這個功能不允許我設置SLComposeViewControllerserviceType,因爲它的屬性爲get

我做錯了什麼?我不能繼承SLComposeViewController嗎?

這裏是我的代碼:

import Foundation 
import UIKit 
import Social 

enum ShareType { 
    case FB, Twitter 
} 

class ShareViewController: SLComposeViewController { 

    var shareType: ShareType! 

    required init(shareType: ShareType) { 
     self.shareType = shareType 

     switch shareType { 
     case .FB: 
      super.init(forServiceType: SLServiceTypeFacebook) 
     case .Twitter: 
      super.init(forServiceType: SLServiceTypeTwitter) 
     } 

    } 


    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 


} 

謝謝!

回答

0

嘗試將super.init()添加到您的init()。 我知道這似乎很簡單,但這就是編譯器所抱怨的。我沒有使用SLComposeViewController,但我已經遇到了與其他類。

+0

沒有運氣 - 同樣的錯誤 – uti0mnia

+0

好。如果在此之前沒有人提供解決方案,我將在幾個小時內有時間進行深入研究。 –

+1

好吧,我想我已經完成了所有的打頭和咬牙切齒,我仍然無法弄清楚如何完成你想要的。從編譯器給我的錯誤看來,它似乎認爲'init!(forServiceType serviceType:String!)'是一個方便的初始值設定項。這直接與文檔相矛盾。祝你好運。如果你確實解決了這個問題,請回到這裏。 –

1

我能做到這一點使用擴展:

enum ShareType { 
    case FB, Twitter 
} 

extension SLComposeViewController { 

    convenience init(shareType: ShareType) { 

     switch shareType { 
     case .FB: 
      super.init(forServiceType: SLServiceTypeFacebook) 
     case .Twitter: 
      super.init(forServiceType: SLServiceTypeTwitter) 
     } 

    } 
} 

這樣調用:

let twitterSheet = SLComposeViewController(shareType: .Twitter)