从较大的一部分创建了一个非常简单(单一视图)的示例项目.它适用于iOS SDK 8.3.
当您点击"显示我"按钮时,视频会出现(作为模态),2秒后,它会消失.看起来不错.但不久之后,应用程序崩溃了,因为-dealloc消息被发送到已经解除分配的对象.
[MPAVController release]:发送给deallocated实例的消息
这是我的示例项目(不要忘记Video.mp4):
ViewController.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@end
Run Code Online (Sandbox Code Playgroud)
ViewController.m
#import "ViewController.h"
#import "MediaViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button setTitle:@"Show me!" forState:UIControlStateNormal];
button.frame = CGRectMake(10.0, 10.0, 100.0, 30.0);
[button addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
}
- (void)buttonTapped:(id)sender
{
MediaViewController *mediaVC = [[MediaViewController alloc] initWithNibName:nil bundle:nil];
[self presentViewController:mediaVC animated:YES completion:^{
[self performSelector:@selector(dismissPresentedController) withObject:nil afterDelay:2.0];
}];
}
- (void)dismissPresentedController
{
[self.presentedViewController dismissViewControllerAnimated:YES completion:nil]; …Run Code Online (Sandbox Code Playgroud) 更新到Xcode 7并在操作中呈现图像时获取此(警告?)消息:
对于支持数据提供者的CGImageRef,CreateWrappedSurface()失败.
在Xcode 6.4下没有这样的消息.
得到了哪个代码部分抛出了消息:
if (!self.originalImage) // @property (nonatomic, strong) UIImage *originalImage;
return;
CGImageRef originalCGImage = self.originalImage.CGImage;
NSAssert(originalCGImage, @"Cannot get CGImage from original image");
CIImage *inputCoreImage = [CIImage imageWithCGImage:originalCGImage]; // this results the console message
Run Code Online (Sandbox Code Playgroud)
我替换了我的CIIImage创建者直接从UIImage获取它:
CIImage *originalCIImage = self.originalImage.CIImage;
NSAssert(originalCIImage, @"Cannot build CIImage from original image");
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我没有得到任何控制台消息,但有一个断言:originalCIImage是零.
UIImage的类引用说:
@property(nonatomic,readonly)CIImage*CIImage
如果使用CGImageRef初始化UIImage对象,则属性的值为nil.
所以我使用原始代码作为后备:
CIImage *originalCIImage = self.originalImage.CIImage;
if (!originalCIImage) {
CGImageRef originalCGImageRef = self.originalImage.CGImage;
NSAssert(originalCGImageRef, @"Unable to get CGimageRef of originalImage");
originalCIImage = [CIImage imageWithCGImage:originalCGImageRef];
}
NSAssert(originalCIImage, @"Cannot …Run Code Online (Sandbox Code Playgroud) 这是问题所在:UITableViewController(带有 UITableView),当没有行时,我想在上面显示“无内容”标签。
它适用于 iOS 8.x但在 iOS 7.1 上崩溃(断言失败)。
-[UITableView layoutSublayersOfLayer:], /SourceCache/UIKit_Sim/UIKit-2935.137/UIView.m:8794 中的断言失败
由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“执行 -layoutSubviews 后仍需要自动布局。UITableView 的 -layoutSubviews 实现需要调用 super。
全栈:
*** Assertion failure in -[UITableView layoutSublayersOfLayer:], /SourceCache/UIKit_Sim/UIKit-2935.137/UIView.m:8794
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Auto Layout still required after executing -layoutSubviews. UITableView's implementation of -layoutSubviews needs to call super.'
*** First throw call stack:
(
0 CoreFoundation 0x007fb1e4 __exceptionPreprocess + 180
1 libobjc.A.dylib 0x0057a8e5 objc_exception_throw + 44
2 CoreFoundation 0x007fb048 +[NSException raise:format:arguments:] + …Run Code Online (Sandbox Code Playgroud) ios ×2
objective-c ×2
xcode ×2
assert ×1
cgimageref ×1
ciimage ×1
ipad ×1
sdk ×1
uiimage ×1
uitableview ×1