小编San*_*ari的帖子

这是使用嵌入式可可豆荚创建动态/嵌入式框架的正确方法吗?

我正在尝试创建一个动态框架来在我的应用程序的各种扩展之间共享代码。

问题 :

这是我的项目结构。

在此输入图像描述

MyFrameworks 是我的应用程序的网络层,本质上使用 Alamofire。我的 pod 文件的结构如下。

platform :ios, '9.0'
use_frameworks!

workspace 'CocoaPodsProjectworkspace'

def shared_pods
    pod 'Alamofire'
    pod 'SwiftyJSON'
end

target 'CocoaPodsProject' do
    project 'CocoaPodsProject.xcodeproj'
    # Pods for CocoaPodsProject
end

target 'MyFramework' do
    project 'MyFramework/MyFramework.xcodeproj'
    shared_pods
end

target 'CocoaPodsProjectTests' do

end

target 'CocoaPodsProjectUITests' do

end
Run Code Online (Sandbox Code Playgroud)

在构建框架时,当我将其作为嵌入式二进制文件拖到我的主项目中时,我收到错误。

dyld:未加载库:.framework/Alamofire 引用自:/Users/sandeep/Library/Developer/Xcode/DerivedData/CocoaPodsProjectworkspace-enpobdyluhbxdwazuvbfogcspfof/Build/Products/Debug-iphonesimulator/MyFramework.framework/MyFramework 原因:未找到图像

我尝试过的解决方案:

  • 在链接的二进制文件中将 pods_frameworks.framework 声明为可选。
  • 尝试更改框架动态库的 RunPath Search 路径
  • 安装名称 运行 pod deintegrate 并再次运行 pod install。
  • 删除派生数据和重新链接框架都会导致同样的问题。

有效的解决方案:

我意识到 MyFramework.framework 试图在错误的目录中找到 Alamofire.framework,并且它总是尝试使用框架相对于项目/目标进行搜索。所以我能找到的最简单的解决方案是修改 pod 文件,如下所示。

platform :ios, '9.0'
use_frameworks!

workspace 'CocoaPodsProjectworkspace' …
Run Code Online (Sandbox Code Playgroud)

ios cocoapods swift3 embedded-framework

2
推荐指数
1
解决办法
2752
查看次数

如何摆脱RxSwift中Variable的初始值

我一直在研究RxSwift,我Variable在RxSwift中使用了一个挂钩(绑定到)的UICollectionView.现在知道VariableBehavior Subjects我必须创建一个Variable具有一些虚拟初始值的扩展.

 var myArray = Variable<[MyDataModel]>([MyDataModel(data: "{:}")])
Run Code Online (Sandbox Code Playgroud)

MyDataModel是一个json作为init参数的结构.(因为MyModel没有解决后面的问题,而不是在这里发布它的结构)

现在,当我将它挂钩到collectionView时,我知道我应该忽略发出的第一个信号,所以我使用它 skip(1)

myArray.asObservable().skip(1).bind(to: collectionView.rx.items(cellIdentifier: "test", cellType: MyCollectionViewCell.self){
        //cell implementation    
})
Run Code Online (Sandbox Code Playgroud)

虽然上面的代码有效,但它可以部分地解决问题.虽然忽略了valueof 的第一个更改myArray,但是当我将实际数据附加到myArray以后使用时

myArray.value.append(someNewData)
Run Code Online (Sandbox Code Playgroud)

它发出通知,不幸的是这次myArray.value有两个值(我在初始化时添加的虚拟值和实际触发的值onNext)

因此,作为一种解决方法,我做的是在盲目地附加数据之前myArray.value检查它是否有我添加的虚拟对象,如果是,我将其删除并添加实际对象.

虽然可以解决问题,但是我的代码在某种程度上看起来非常丑陋且非Rx.我认为必须有一个正确的方法来解决它,因为这是一个非常基本的问题Variable.

我真的很感激你的想法.

ios rx-swift

2
推荐指数
1
解决办法
2565
查看次数

如何从UIView到ViewController获取按钮?

我在自定义视图上创建了包含一个标签和按钮,我在UIView类中创建了两个插座

在此输入图像描述

我有一个UIViewController,其中我有自定义视图现在我想要更改标签名称并希望在按钮单击时执行某些操作.

let commonView = UINib(nibName: "CommonView", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! CommonView
        firstView.addSubview(commonView)


        commonView.lblCommon.text = "We can change label in particular Screen"
Run Code Online (Sandbox Code Playgroud)

我能够更改标签文本但是如何在UIViewcontroller中获取按钮操作事件?

uiviewcontroller uiview ios swift

1
推荐指数
1
解决办法
2024
查看次数

为什么在可视化调试中看不到inputAccessoryView?

我在这里附加了模拟器屏幕截图和视图调试窗口。 xcode视图调试器模拟器屏幕截图

如您所见,inputAccessoryView在模拟器中可见,但在视觉调试中不可见,并且不明白为什么,请帮助:)

inputAccessoryView的代码:

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        view.backgroundColor = .blue
    }

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

    override var inputAccessoryView: UIView? {
        let v = UIView.init(frame: CGRect.init(x: 0, y: 0, width: view.frame.size.width, height: 60))
        v.backgroundColor = .red
        let label = UILabel()
        label.textAlignment = .center
        label.translatesAutoresizingMaskIntoConstraints = false
        v.addSubview(label)
        label.text = …
Run Code Online (Sandbox Code Playgroud)

debugging xcode ios inputaccessoryview

0
推荐指数
1
解决办法
95
查看次数