2016-12-28 36 views
2

我有一個iOS應用程序,可以將聲音添加到視頻中。現在我想要構建應用擴展程序目標以支持庫存的照片應用程序。不過,我必須從iOS應用程序中複製幾乎所有的代碼。我迄今爲止的解決方案是將共同函數放在共享文件中,並將其用於兩個目標,因爲應用程序中的某些代碼鏈接到AppDelegate,我無法在App Extension中使用它。在這種情況下是否有更好的方法避免代碼重複?iOS基於現有應用程序構建應用程序擴展。如何避免代碼重複?

還有一個問題:我在AppStore上看到的大多數擴展只有一個屏幕,是否有任何規則?

在我的應用程序中,我必須讓用戶從文件夾&庫中選擇聲音,並且它需要導航控制器。但導航控制器不適用於應用程序擴展,我應該建立自己的導航控制器還是有更好的方法?

回答

1

只要您不需要定位iOS 7或更低版​​本,就可以將公共類放入共享框架並從兩個目標加載該框架。這避免了在磁盤上存在兩個代碼實例。

作爲額外的好處,由於操作系統處理共享庫加載的方式,所有實際代碼頁都在應用程序和擴展之間共享,因此您也不會浪費RAM。

+0

我的大多數課程都是視圖控制器,而我在課堂中引用的應用程序委託不適用於應用程序擴展 –

+0

一種解決方案是添加一層抽象。例如,您可以創建一個單獨的類來存儲有趣的數據,而不是將其存儲在應用程序委託中,或者可以創建兩個具有相同名稱的類 - 在應用程序中創建兩個類,其中調用方法在應用程序委託,另一個在其方法做了不同的擴展。 – dgatwood

+0

另一種方法,如果你實際上不需要擴展中的某些功能,那就是對應用程序委託類的弱鏈接,然後檢查該類本身是否爲零,如果是,則是在擴展中運行,並跳過有問題的行爲。 – dgatwood

相關問題