以下代码块会导致错误消息:
2013-09-13 15:27:08.449 Mobile [746:5603] {MediaLibrary}回滚交易.
MPMediaQuery *mediaQuery = [MPMediaQuery songsQuery];
NSArray *collections = [mediaQuery collections];
Run Code Online (Sandbox Code Playgroud)
这是在iOS 7 GM的控制台中.
这在iOS 6中没有问题.
有谁知道这与iOS 7有什么关系?我已经搜遍了所有,并且找不到任何关于它的信息.
此外,在for循环的每次迭代中都会记录该消息:
for (MPMediaItemCollection *collection in collections) {
for (MPMediaItem *item in collection.items) {
//message is written to log here as well
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个AVComposition和一个AVVideoComposition,我每半秒左右就生成一个拇指视频.我使用动画工具进行一些叠加.我在操作队列上执行调用,并在某些类型的编辑后触发.操作队列是串行而不是异步,因此进程永远不会运行并且我已经验证了这一点.下面的代码在串行队列中的另一个NSOperation中的主线程上执行.
现在我的问题是,拇指随机失败,没有模式.我可以运行一次并让它全部成功.我可以用完全相同的参数再次运行它,并且有一些拇指失败.我可以再次运行它并且有不同的拇指失败.
它似乎与其他线程中正在进行的其他活动有关,例如从ALAssetLibrary或MediaFramework查询大量项目.
我还要提到这在iOS6中没有这个问题.
在生成拇指之前,我会创建AVComposition和AVVideoComposition的副本.
有人对我有任何指示?
我很感激.
//this must be called on the main thread to correctly generate overlays
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
AVAsset *asset = avComposition;
AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:asset];
generator.appliesPreferredTrackTransform = TRUE;
AVMutableVideoComposition *mutableVideoComposition = (AVMutableVideoComposition *) avVideoComposition.mutableCopy;
CALayer *baseSyncLayer = [CALayer layer];
baseSyncLayer.frame = CGRectMake(0, 0, resolution.width, resolution.height);
CALayer *videoLayer = [CALayer layer];
videoLayer.frame = CGRectMake(0, 0, resolution.width, resolution.height);
[baseSyncLayer addSublayer:videoLayer];
__unused NSArray *imageLayers = [MovieCompositionService applyImageAnimations:avComposition andLayer:baseSyncLayer andProject:project fileRender:YES addTextOverlays:addTextOverlays andResolution:resolution];
mutableVideoComposition.animationTool = [AVVideoCompositionCoreAnimationTool videoCompositionCoreAnimationToolWithPostProcessingAsVideoLayer:videoLayer …Run Code Online (Sandbox Code Playgroud)