gpt4 book ai didi

cocoa - 有谁见过 "[StdMovieUISliderCell sliderType]: unrecognized selector sent to instance"

转载 作者:行者123 更新时间:2023-12-03 16:05:25 24 4
gpt4 key购买 nike

我正在使用 QTMovieView,有时,我会收到以下日志,并随后出现未知的选择器异常。该程序具有供用户设置显示和隐藏 QTMovieView Controller 的选项。该程序链接的 SDK 是 10.7

“[StdMovieUISliderCell sliderType]:发送到实例的无法识别的选择器”

感谢您的帮助

最佳答案

这看起来像是 OS X Mountain Lion 10.8 中引入的错误(编辑:也有关于 OS X 10.7 的报告,请参阅下面的评论)。我猜想 QTMovieView 将在下一个主要 OS X 版本之一中被弃用。最好的解决方案是迁移到 AV Foundation(AVPlayer 和相应的 AVPlayerLayer 类)。苹果有一些documentation about playing back assets using this framework .

也就是说,如果您无法更新到 AV Foundation 或者无法关闭自动布局,您仍然可以通过在运行时将缺少的方法动态添加到 StdMovieUISliderCell 类。确保尽早添加 Objective C 运行时头文件并添加方法(例如,在应用程序委托(delegate)中添加 + (void)load)。由于 App Store 静态分析器拒绝 foo 的原因,向类名添加一些简单的编码(如 rot13)也是安全的。

// Make sure that we have the right headers.
#import <objc/runtime.h>

// The selectors should be recognized by class_addMethod().
@interface NSObject (SliderCellBugFix)

- (NSSliderType)sliderType;
- (NSInteger)numberOfTickMarks;

@end

// Add C implementations of missing methods that we’ll add
// to the StdMovieUISliderCell class later.
static NSSliderType SliderType(id self, SEL _cmd)
{
return NSLinearSlider;
}

static NSInteger NumberOfTickMarks(id self, SEL _cmd)
{
return 0;
}

// rot13, just to be extra safe.
static NSString *ResolveName(NSString *aName)
{
const char *_string = [aName cStringUsingEncoding:NSASCIIStringEncoding];
NSUInteger stringLength = [aName length];
char newString[stringLength+1];

NSUInteger x;
for(x = 0; x < stringLength; x++)
{
unsigned int aCharacter = _string[x];

if( 0x40 < aCharacter && aCharacter < 0x5B ) // A - Z
newString[x] = (((aCharacter - 0x41) + 0x0D) % 0x1A) + 0x41;
else if( 0x60 < aCharacter && aCharacter < 0x7B ) // a-z
newString[x] = (((aCharacter - 0x61) + 0x0D) % 0x1A) + 0x61;
else // Not an alpha character
newString[x] = aCharacter;
}
newString[x] = '\0';

return [NSString stringWithCString:newString encoding:NSASCIIStringEncoding];
}

// Add both methods if they aren’t already there. This should makes this
// code safe, even if Apple decides to implement the methods later on.
+ (void)load
{
Class MovieSliderCell = NSClassFromString(ResolveName(@"FgqZbivrHVFyvqrePryy"));

if (!class_getInstanceMethod(MovieSliderCell, @selector(sliderType)))
{
const char *types = [[NSString stringWithFormat:@"%s%s%s",
@encode(NSSliderType), @encode(id), @encode(SEL)] UTF8String];
class_addMethod(MovieSliderCell, @selector(sliderType),
(IMP)SliderType, types);
}
if (!class_getInstanceMethod(MovieSliderCell, @selector(numberOfTickMarks)))
{
const char *types = [[NSString stringWithFormat: @"%s%s%s",
@encode(NSInteger), @encode(id), @encode(SEL)] UTF8String];
class_addMethod(MovieSliderCell, @selector(numberOfTickMarks),
(IMP)NumberOfTickMarks, types);
}
}

我在实现这两种方法时做了两个假设:

  1. 影片 View 只能有线性 slider ,不能有圆形 slider 。
  2. 电影 View 不会有刻度线。

如果您的电影有章节,但我不知道如何处理它们,因为我不需要或不使用它们,后者可能会成为问题。

关于cocoa - 有谁见过 "[StdMovieUISliderCell sliderType]: unrecognized selector sent to instance",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10942006/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com