如何创buildAVPlayer单例类

我使用AVPlayer播放歌曲从urls,我初始化和分配它在我的viewcontroller,现在我有一个问题,当我导航到另一个视图控制器,并回到主播放器播放歌曲细节和滑块更新应保持,但问题是当我导航到主播放器再次播放细节和滑块更新没有发生,但歌曲不断播放。 我怎样才能避免这一点,任何人都可以给我一些例子。 我是否需要创build一个单例类,如果是的话,如何创build一个单例类的AVPlayer 。 谢谢

为什么NSUserDefaults无法保存NSMutableDictionary?

我试图用NSUserDefaults保存一个NSMutableDictionary 。 我阅读了很多关于这个主题的post…我也发现了一个选项,工作; 然而不幸的是,它只工作了一次,然后开始只保存(空)。 有人有提示吗? 谢谢 代码保存: [[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:dictionary] forKey:@"Key"]; [[NSUserDefaults standardUserDefaults] synchronize]; 加载代码: NSMutableDictionary *dictionary = [[NSMutableDictionary alloc]init]; NSData *data = [[NSUserDefaults standardUserDefaults]objectForKey:@"Key"]; dictionary = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 将对象添加到NSMutableDictionary代码: [dictionary setObject:[NSNumber numberWithInt:0] forKey:@"Key 1"]; [dictionary setObject:[NSNumber numberWithInt:1] forKey:@"Key 2"]; [dictionary setObject:[NSNumber numberWithInt:2] forKey:@"Key 3"]; 代码到NSLog()值: for (NSString * key in [dictionary allKeys]) { […]

什么时候在Swift中使用全局variables

我正在学习Swift和iOS应用开发,我想知道在哪些情况下(如果有的话),我应该在iOS应用中使用全局variables和常量。 全局variables是在任何函数,方法,闭包或types上下文之外定义的variables。 局部variables是在函数,方法或闭包上下文中定义的variables。 使用全局variables通常看起来不雅观,不可取(实际上不是大多数指南和教程推荐的),并在视图控制器之间传递数据我使用prepareForSegue(_: sender:)方法。 然而在某些情况下,我认为使用全局variables会使代码变得更简单和更快。 例如,Applebuild议为每个格式模式存储NSDateFormatter或NSNumberFormatter ,并且不要在每次需要时重新创build或更改。 在我开发学习语言的应用程序中,大多数视图控制器使用NSDateFormatter和NSNumberFormatter并为每个视图控制器创build一个新的视图可能不是一个好主意。 我可以将它传递给prepareForSegue,但我认为也许在这种情况下,最好使用一个全局variables来保存每个视图控制器可以使用的格式化器实例。 那么有没有我应该使用全局variables的情况?

如何使用媒体分段器分割video?

我已经阅读了很多关于HTTP Live Streaming文档。 但我仍然在尝试解决scheme..我已经转换我的video.ts格式与ffmpeg 。 现在我知道我必须分割我的video,并且必须使用mediasegmenter创build播放列表。 但是我不知道mediasegmenter在哪里,以及如何使用它来分割video。 我很新,所以对于这个愚蠢的问题感到抱歉。 任何帮助,将不胜感激..!! 提前致谢..!!

closures当前视图控制器中以前的模式视图控制器

我目前有3个ViewController: LoginViewController , SignUpViewController和MainViewController 。 当用户打开应用程序时,将显示LoginViewController 。 如果用户第一次使用该应用程序,那么他们将不得不注册,“注册”button在LoginViewController 。 “注册”button将popupSignUpViewController 。 一旦用户完成注册。 MainViewController将会出现。 我正在试图做的是。 在MainViewController会有一个“注销”button。 当用户按下它时, MainViewController应该被解除, LoginViewController应该在那里。 用户不应该SignUpViewController看到SignUpViewController 。 这是我所尝试的: 1)closuresSignUpViewController并在“注册”button中显示MainViewController : – (void) signUpClicked { MainViewController *mainViewController = [viewController.storyboard instantiateViewControllerWithIdentifier:@"MainViewController"]; [viewController presentViewController:mainViewController animated:YES completion:^{ [viewController dismissViewControllerAnimated:NO completion:^{ }]; }]; } 2)当MainViewController加载时,closuresSignUpViewController – (void)viewDidLoad { [super viewDidLoad]; SignUpViewController *signUpViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"SignUpViewController"]; [signUpViewController dismissViewControllerAnimated:NO […]

AVPlayer不会在iPhone上的结束中断时继续播放,但在iPad上也是如此

我正在为iPhone和iPad编写一个广播应用程序,并在处理暂停和播放audio时遇到一些奇怪的行为。 我使用AVAudioSessionDelegate方法beginInterruption和endInterruption来分别pause和play AVPlayer。 以下是相关的play代码。 现在,以下情况似乎一致发生: 在iPad上:如果我强制中断(Facetime调用), beginInterruption预期调用beginInterruption并停止播放。 如果中断停止, endInterruption按预期endInterruption被调用,并且播放按照预期恢复。 在iPhone上:按下播放和暂停button,触发pause和play与beginInterruption和endInterruption 。 播放行为如预期。 在iPhone上:强制中断(通过拨打电话),按预期调用endInterruption按照预期暂停播放。 但是,当中断完成时, beginInterruption被调用为预期的, play被调用为预期, 它实际上到达并执行[self.player play]行 ,但播放不会恢复! 我什么也没听到。 以上情况3是非常奇怪的,所以我想知道我是否可能忽略了一些东西。 有任何想法吗? Play代码 – (void)play { NSError* error = nil; AVKeyValueStatus keyStatus = [currentAsset statusOfValueForKey:@"tracks" error:&error]; if(error){ DLog(@"Error %@", [error localizedDescription]); } else { DLog(@"Current Key Status: %i", keyStatus); if(keyStatus == AVKeyValueStatusLoaded){ DLog(@"Continue playing source: […]

将stream(utf8)数据转换为string的安全方法是什么?

假设我是一个用objc / swift编写的服务器。 客户端发送了大量的数据,这实际上是一个很大的utf8编码的string。 作为服务器,我有我的NSInputStream触发事件,说它有数据读取。 我抓住数据,并build立一个string。 但是,如果我得到的下一个数据块落在utf8数据的一个不幸的位置呢? 就像一个组成的angular色。 看起来好像会混淆string,如果你试图追加一大块非兼容的utf8它。 什么是合适的方式来处理这个问题? 我以为我可以保留数据作为一个NSData,但是我没有办法知道什么时候数据已经完成接收(想想数据长度在头部的HTTP)。 感谢您的任何想法。

“阻塞”主线程(dispatch_get_main_queue())和(或不)定期运行currentRunLoop – 有什么区别?

我有以下代码: – (void)test_with_running_runLoop { dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); NSTimeInterval checkEveryInterval = 0.05; NSLog(@"Is main queue? : %d", dispatch_get_current_queue() == dispatch_get_main_queue()); dispatch_async(dispatch_get_main_queue(), ^{ sleep(1); NSLog(@"I will reach here, because currentRunLoop is run"); dispatch_semaphore_signal(semaphore); }); while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW)) [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:checkEveryInterval]]; NSLog(@"I will see this, after dispatch_semaphore_signal is called"); } – (void)test_without_running_runLoop { dispatch_semaphore_t semaphore […]

在iOS模拟器上使用localhost的CFNetwork SSLHandshake失败(-9807)

我正尝试使用TCP SSL连接openssl s_server和iOS客户端,但获取CFNetwork SSLHandshake failed (-9807) 。 Objective-C代码( 从这里 ): – (void)viewDidLoad { [super viewDidLoad]; printf("method started \n"); NSBundle *bundle = [NSBundle bundleForClass:[self class]]; NSData *iosTrustedCertDerData = [NSData dataWithContentsOfFile:[bundle pathForResource:@"servercert" ofType:@"der"]]; OSStatus err = noErr; SecCertificateRef cert; cert = SecCertificateCreateWithData(NULL, (CFDataRef) iosTrustedCertDerData); assert(cert != NULL); CFTypeRef result; NSDictionary* dict = [NSDictionary dictionaryWithObjectsAndKeys: (id)kSecClassCertificate, kSecClass, cert, […]

如果不使用CoreAnimation,如何避免“CoreAnimation警告已删除的线程与未提交的CATransaction”

就在appdelegates中,applicationDidBecomeActive。 我创build并启动一个线程,此线程等待asynchronous下载,然后保存数据: – (void)applicationDidBecomeActive:(UIApplication *)application { // begins Asynchronous download data (1 second): [wsDataComponents updatePreparedData:NO]; NSThread* downloadThread = [[NSThread alloc] initWithTarget:self selector: @selector (waitingFirstConnection) object:nil]; [downloadThread start]; } 然后 -(void)waitingFirstConnection{ while (waitingFirstDownload) { // Do nothing … Waiting a asynchronous download, Observers tell me when // finish first donwload } // begins Synchronous download, and […]