2017-01-22 43 views
1

比方說,我有2個框架:與遊樂場相關框架

  • MyApp.framework
  • FancyLabels.framework

MyApp.framework具有使用類從FancyLabels.framework一個故事板。

如果我創建一個鏈接並嵌入這兩個框架的應用程序目標,我可以從MyApp.framework實例化視圖控制器沒有問題。

但是,如果我嘗試從遊戲中的MyApp.framework實例化視圖控制器,它無法從FancyLabels.framework中找到類。

我的遊樂場代碼:

//: Playground - noun: a place where people can play 

import UIKit 
import MyApp 
import FancyLabels 

let bundle = Bundle(for: MyAppViewController.self) 
let storyboard = UIStoryboard(name: "Main", bundle: bundle) 
let vc = storyboard.instantiateViewController(withIdentifier: "MyAppViewController") 
let view = vc.view 

在控制檯輸出:

2017-01-22 19:18:17.016 MyPlayground[98260:3124481] Unknown class _TtC18FancyLabels11StyledLabel in Interface Builder file. 
2017-01-22 19:18:17.037 MyPlayground[98260:3124481] Failed to set (styleString) user defined inspected property on (UILabel): [<UILabel 0x7fcf175017c0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key styleString. 

回答

0

終於明白了這一點。問題是我的「FancyLabels」框架正在通過Carthage(XCGLogger)使用預構建框架。解決方案是遵循適當的步驟在操場上使用Carthage框架,即將框架的項目從Carthage/Checkout添加到我的工作空間並構建它。然後,所有事情都按預期工作,即使是框架項目中的操場,在MyApp框架的storyboard/xib中充分使用FancyLabels。

對於人來到這個疑問,與設置此功能,即使沒有迦太基strugging,我做的是如何在這裏設置此快速工作示例:https://github.com/mfclarke/NestedFrameworksInPlaygrounds/

2

我已經在努力尋找這一以及最好的辦法:(

的最佳解決方案我發現的是創建一個空白/空的工作空間,您可以在其中添加您的框架(只需將它們拖入工作空間,就像添加到常規項目中一樣),然後再將這些工作空間添加到工作區高手。

而不是打開遊樂場,然後打開工作區,並在該環境中使用操場。

第一次在工作區中打開操場時,您會看到一個錯誤,表示無法找到該框架,但在運行build後,該框架可用。

另一個問題是,當您從該工作區訪問框架時,使用該框架的任何其他項目也需要關閉。

如果你想看看一個例子設置,你可以看到在我的項目在這裏的「操場」文件夾:https://github.com/mathewsanders/Mustard/tree/master/Playgrounds

很想聽到的話,其他人已經找到了更好的方法,這是因爲具有侷限性在使用工作區時關閉其他項目非常煩人。

+0

謝謝您的回答@MathewS。在我的具體案例中,問題是「FancyLabels」框架正在使用預建的Carthage框架。我設法在不使用空白/空白工作區的情況下也能正常工作。看看我的答案中的github鏈接。 –