Tag: objective c

在UITableView中更改AVPlayer的playerItem

我有一个UITableView包含滚动时播放的video数量。 当tableView中的单元格被重新使用时,我只为每一行实例化一个AVPlayer 。 当一个单元格被重新使用时,我只需通过调用[self.player replaceCurrentItemWithPlayerItem:newItem];来更改单元格玩家的[self.player replaceCurrentItemWithPlayerItem:newItem]; 。 这是目前正在间接调用tableView:cellForRowAtIndexPath 。 当向下滚动时,重新使用时会有明显的滞后。 通过一个消除的过程,我已经得出结论,滞后是由replaceCurrentItemWithPlayerItem ,甚至开始播放之前造成的。 当删除这一行代码(防止玩家获得一个新的video),滞后消失。 我试图解决它: 我有一个自定义的UITableViewCell播放这些video,我已经创build了一个方法来初始化来自对象的新信息。 IE,在cellForRowAtIndexPath:我调用[cell initializeNewObject:newObject]; 执行以下方法: //In CustomCell.m -(void)initializeNewObject:(CustomObject*)newObject { /*…*/ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ AVPlayerItem *xPlayerItem = [[AVPlayerItem alloc] initWithURL:[NSURL URLWithString:newObject.url]]; AVPlayer *dummy = self.player; [dummy replaceCurrentItemWithPlayerItem:xPlayerItem]; dispatch_async(dispatch_get_main_queue(), ^{ self.player = dummy; playerItem = xPlayerItem; } }/*…*/ } 当运行这个,我得到了相同的结果,如果我完全删除了更换项目的呼叫。 显然,这个函数不能被线程化。 我并不完全确定我对此的期望。 我会想象我需要一个干净的AVPlayer这个工作copy ,但search了一下之后,我发现了几个意见,指出replaceCurrentItemWithPlayerItem: […]

iOS心率检测algorithm

我试图在我正在开发的应用程序中实现心跳loggingfunction。 这样做的首选方法是使用iPhone的照相机,使用户将手指放在镜头上,并检测videoinput中与用户心脏相对应的波动。 我发现这里有一个很好的起点,下面的堆栈溢出问题 该问题提供了有用的代码来绘制心跳时间图。 它显示了如何启动一个AVCaptureSession并打开相机的灯光,如下所示: session = [[AVCaptureSession alloc] init]; AVCaptureDevice* camera = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; if([camera isTorchModeSupported:AVCaptureTorchModeOn]) { [camera lockForConfiguration:nil]; camera.torchMode=AVCaptureTorchModeOn; // camera.exposureMode=AVCaptureExposureModeLocked; [camera unlockForConfiguration]; } // Create a AVCaptureInput with the camera device NSError *error=nil; AVCaptureInput* cameraInput = [[AVCaptureDeviceInput alloc] initWithDevice:camera error:&error]; if (cameraInput == nil) { NSLog(@"Error to create camera capture:%@",error); } // […]

如何检查两个格式string是否兼容?

例子: "Something %d" and "Something else %d" // Compatible "Something %d" and "Something else %f" // Not Compatible "Something %d" and "Something %d else %d" // Not Compatible "Something %d and %f" and "Something %2$f and %1$d" // Compatible 我想这应该有一些C函数,但我没有得到任何相关的search结果。 我的意思是编译器正在检查格式string和参数是否匹配,所以用于检查的代码已经写好了。 唯一的问题是我怎样称呼它。 我正在使用Objective-C,所以如果有一个Objective-C特定的解决scheme也可以。

iOS8:退出应用程序后不久,蓝条“正在使用你的位置”出现

我想在后台跟踪时得到蓝条,但不是在后台。 我的应用程序一直使用位置服务,所以在iOS8中,我使用CLLocationManager上的requestWhenInUseAuthorization 。 通常,应用在closures时会停止跟踪您的位置,但用户可以select让应用在后台跟踪其位置。 因此,我在Info.plist文件中有UIBackgroundModes的location选项。 这很好地工作:当切换到后台,应用程序不断获取位置更新,并出现一个蓝色的条形提醒,该应用程序正在使用位置服务。 全部完美。 但问题是,当用户没有select在后台跟踪时,蓝条也会出现。 在这种情况下,我只需在进入后台时停止AppDelegate的位置更新: – (void) applicationDidEnterBackground:(UIApplication *)application { if (!trackingInBackground) { [theLocationManager stopUpdatingLocation]; } } closures应用程序后,蓝条仅显示一秒钟,但仍然看起来非常恼人。 我知道,使用requestAlwaysAuthorization而不是requestWhenInUseAuthorization将解决问题,但是我根本不会得到任何蓝条,也不是在后台跟踪实际上。 我已经尝试在applicationWillResignActive:方法中已经stopUpdatingLocation ,但这没有什么区别。 有没有人知道如何在后台跟踪时获得蓝条,但是没有时间呢?

Whatsapp的Web版本如何在iOS设备上运行,并在30秒内closures应用程序?

现在,对于那些不知道的人,可以去https://web.whatsapp.com/和通过交换QR码和通过应用程序的networking扩展聊天同步你的Whatsapp聊天。 我对他们如何进行初始握手(可能与whatsapp服务器通信)以及他们如何快速同步数据(可能正在使用直接从设备到客户端的Open套接字)感兴趣。 我很好奇这个应用程序是如何在iOS的后台工作的 。 AFAIK运行后台Intent Service非常简单。 但不适用于iOS。 应用程序正常closures后,iOS只允许长达30秒。 1)我试图崩溃的应用程序(向上滑动)(仍然网页版本正常运行) 2)我禁用Background App refresh Web版本并没有停止。 3)即使禁用Notifications仍然Web版本正常工作。 4)当Google Maps给你指示应用程序在BG中运行的指示时,他们也没有Blue bar 5)他们是否使用虚拟Geo Fencing来保持他们的活力? (但那也需要BG App Refresh) 是否引入了iOS 8上的一些新function,但我不知道

在Objective-C中完成保护属性的解决方法

我一直在试图find一个解决方法来声明在Objective-C中的@保护属性,所以只有层次结构中的子类可以访问它们(只读,而不是写)。 我读了这样做没有logging的方式,所以我想到了这个解决方法,我想问StackOverflow的意见。 层次结构顶部的每个自定义类都包含三个类,一个实现和两个接口。 我们来命名他们: ClassA.h ClassA_protected.h ClassA.m 然后,这个ClassA的任何子类将像往常一样: ClassB.h ClassB.m 首先,我创build了一个接口ClassA.h ,我声明了一个受保护的intvariables,以便ClassA的任何子类都可以访问它: @interface ClassA : NSObject{ @protected int _myProtectedInt; } @end 下一步是我正在谈论的解决方法。 但是,一旦你读了它,你会看到它是非常简单的。 我声明了第二个名为ClassA_protected.h的接口,它实际上是ClassA.h的扩展 ,并允许我们将属性标记为readonly : #import "ClassA.h" @interface ClassA () @property (nonatomic , readonly) int myProtectedInt; @end 准备受保护的层次结构的最后一步是在ClassA.m中声明它的实现,我们只综合我们的属性: #import "ClassA_protected.h" @implementation ClassA @synthesize myProtectedInt = _ myProtectedInt; @end 这样,每个需要成为ClassA.h的子类的类都将导入ClassA_protected.h 。 所以像ClassB.h这样的孩子将如下所示: #import "ClassA_protected.h" @interface […]

scaledValueForValue:调用没有文本样式集的字体

我目前正在使用的Xcode 6前版本(而不是testing版)和OS X 10.10 Yosemite beta 7上的模拟器。我试图build立一个项目在Xcode 6开发,但应用程序崩溃,每当我打开一个特定的视图控制器。 这个视图控制器从字面上没有代码(它是一个空的,静态的,表视图控制器,有几个默认的单元格和标签)。 给出的错误是: *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'scaledValueForValue: called on a font that doesn't have a text style set' 而在我得到这个断言失败之前: *** Assertion failure in -[UICTFont _scaledValueForValue:], /SourceCache/UIFoundation_Sim/UIFoundation-371/UIFoundation/iOS/UIFont.m:496 我真的不知道发生了什么,我尝试在VC中设置断点,但是在调用viewDidLoad方法(因此在执行完所有代码之后)之后发生错误。 有任何想法吗? 在我的项目中的一切字体是'巴斯克维尔',我试图改变,但它不影响崩溃。 哦,如果我使用Xcode 5,它工作正常。 更新9/24 :所以我仍然无法弄清楚这一点。 我尝试使用fontWithDescriptor方法,但它仍然崩溃。 有趣的是,我有很多使用自定义字体的页面,而且大多数页面都可以正常工作,但是有两个VC会在我去他们的时候立即崩溃…其中一个甚至没有任何自定义字体。 我非常感谢您的反馈,但是有没有人有任何其他想法/修复? 我正在使用Xcode的正式版本,它仍然无法正常工作。

isEqualTo和isEqual之间的区别:

这些方法之间的区别究竟是什么?

具有自定义字体的UITextField secureTextEntry项目符号?

我在UITextField使用了一个自定义字体,它已经打开了secureTextEntry 。 当我在单元格中input内容时,我看到了所选字体中的子弹,但是当该字段失去焦点时,这些子弹将恢复为系统标准字体。 如果我再次点击该字段,它们会变回我的字体,依此类推。 有没有一种方法可以确保他们继续显示自定义字体的项目符号,即使该字段没有对焦?

用于Facebook的UIActivityViewController不显示默认文本

我正在使用UIActivityViewController,它提供了一些默认的文本和链接。 所有的社交媒体(短信,电子邮件,微博)都会显示默认的文字和url。 但是,在显示URL图像的同时使用FB,默认文本不显示(只是空白)。 以下是代码: NSString *shareStr = [NSString stringWithFormat:@""some text"]; NSURL *website = [NSURL URLWithString:@"website"]; NSArray *shareAray = @[shareStr,website]; [self viewWillDisappear:YES]; UIActivityViewController *activityController = [[UIActivityViewController alloc]initWithActivityItems:shareAray applicationActivities:nil]; if([activityController respondsToSelector:@selector(popoverPresentationController)] ) activityController.popoverPresentationController.barButtonItem = self.shareButton; [self presentViewController:activityController animated:YES completion:nil]; [activityController setCompletionHandler:^(NSString *activityType, BOOL completed){ if (!activityType || UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { [self viewWillAppear:YES]; } }]; 更新:正如其他人在下面说的,FB不再允许预填充。 这里是另一个video的链接,给出了什么是允许的,什么不是: […]