ios - 从 Swift 分配的 Objective-C block 在分配后为零

标签 ios objective-c swift objective-c-blocks swift2

这与有关从 Swift 访问 ObjC 回调的其他问题高度相关。但我的研究尚未产生有效结果。

有人能看出我是否可能在语法方面做了错误的事情吗?

我已将以下 Objective-C 回调声明为:

#import <UIKit/UIKit.h>

@class KxMovieDecoder;

typedef void (^KX_FIRST_FRAME_CALLBACK)() ;


extern NSString * const KxMovieParameterMinBufferedDuration;    // Float
extern NSString * const KxMovieParameterMaxBufferedDuration;    // Float
extern NSString * const KxMovieParameterDisableDeinterlacing;   // BOOL

@interface KxMovieViewController : UIViewController<UITableViewDataSource, UITableViewDelegate> {
    KX_FIRST_FRAME_CALLBACK firstFrameLoaded;
}

+ (id) movieViewControllerWithContentPath: (NSString *) path
                               parameters: (NSDictionary *) parameters;

@property (readonly) BOOL playing;
@property (nonatomic, copy) KX_FIRST_FRAME_CALLBACK firstFrameLoaded;

- (void) play;
- (void) pause;

@end

当我从 swift 代码中分配给它时,分配后它仍然为零:

Image showing debug

public func startViewing() -> UIViewController {

        kxMoviePlayer = KxMovieViewController.movieViewControllerWithContentPath(rtspURL, parameters: nil) as? KxMovieViewController
        kxMoviePlayer!.firstFrameLoaded = {
            self.onFirstFrameOfVideo()
        }

最佳答案

只需将一个具有类似设置的空白项目放在一起,它就可以正常工作。不过有几个问题。

您的意思是同时拥有一个实例变量和一个名为 firstFrameLoaded 的属性吗?您的自动合成属性未使用实例变量,而是使用自动生成的 _firstFrameLoaded 实例变量。也许这就是混淆的根源,您打算在 i-var 前加上下划线?

回调属性是 copy 而不是指示 strongweak 引用的任何原因?

关于ios - 从 Swift 分配的 Objective-C block 在分配后为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32959396/

相关文章:

ios - TableView 自定义单元格设计问题

ios - 以编程方式添加自动布局约束时,它们无法正常工作

ios - 如何显示 View 覆盖另一个 View 并更改 View 大小

ios - 快速绘制烛台图

ios - 通过蓝牙 iOS 发送和接收图像

iphone - eventkit 并从应用程序将事件添加到日历中

ios - iOS 应用程序中的 Twitter 集成

ios - iPhone 5 有 3 个麦克风。我可以改变我正在录制的那个吗?

objective-c - 我在 Objective-C 中的矩阵方面遇到问题

ios - 如何将获取的ObjectID与字符串进行比较?