我想用这个对象工厂:给定一个string,创build一个类,如果这个类支持一个协议(与一个Create()方法)然后分配类,并调用创build。
我有一个视图(我们称之为视图A),它的超级视图(视图B)具有weak属性。 查看一个KVO的超级视图,查看B.因为视图A对视图B的引用是一个弱属性(为了防止保留周期),我怎样才能删除观察者(A观察B)? 查看A的视图B的引用在我有机会删除它之前没有被删除。 因为视图控制器有一个强烈的参考A.这里是泄漏的日志消息: An instance 0x9ac5200 of class UITableView was deallocated while key value observers were still registered with it. Observation info was leaked, and may even become mistakenly attached to some other object. Set a breakpoint on NSKVODeallocateBreak to stop here in the debugger. Here's the current observation info: <NSKeyValueObservationInfo 0x8660360> ( <NSKeyValueObservance […]
我正在为iOSdevise一款多人游戏,并且在Apple Developer Center中阅读材料,特别是这个 。 这是我的自定义匹配代码,这是非常简单的: – (void)findProgrammaticMatch { GKMatchRequest *request = [[GKMatchRequest alloc] init]; request.minPlayers = 2; request.maxPlayers = 2; request.defaultNumberOfPlayers = 2; request.playersToInvite = nil; request.playerAttributes = 0; request.playerGroup = 0; UILabel *loading = (UILabel *)[aiw viewWithTag:792]; [[GKMatchmaker sharedMatchmaker] findMatchForRequest:request withCompletionHandler:^(GKMatch *match, NSError *error) { if (error){ //error handling [loaderLayer stopAnimating]; UIButton *cancelButton = […]
(这既是问题又是答案,因为需要相当多的挖掘才能find真正的答案。) 症状: viewWillAppear , viewDidAppear没有在我的UIViewController中被调用。 原因:在UIViewControllerembeddedUINavigationController或UITabBarController (我的情况)以某种方式中断调用这些方法。 解决scheme:在包含上述UINavigationController / UITabBarController的UIViewController中手动调用它们。 例如(假设projectNavigationController是你的UINavigationController ): – (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [projectNavigationController viewWillAppear:animated]; } – (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [projectNavigationController viewWillDisappear:animated]; } – (void)viewDidAppear:(BOOL)animated { [超级viewDidAppear:animation]; [projectNavigationController viewDidAppear:animated]; } – (void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:animated]; [projectNavigationController viewDidDisappear:animated]; } 在我的情况下,我有一个内部的UITabBarController ,我相应地调用了方法,所有都解决了。 (解决scheme归因: http : //davidebenini.it/2009/01/03/viewwillappear-not-being-called-inside-a-uinavigationcontroller/ )
如果用户从应用中解散GameCenterlogin三次,则不会再次提示。 authentication处理程序返回这个: The requested operation has been cancelled or disabled by the user. 在之前版本的iOS(6及以下版本)中,用户可以访问GameCenter应用程序并login,从这一点开始,所有这些都会很好 – 他们可以返回到您的应用程序并正常login。 在iOS7中(据我所知),取消3次永久禁用该设备上的应用程序的GameCenter。 即使作为一个不同的用户, Deleting/reinstalling应用程序,或者logging out/in ,都不能解决它 – 你仍然得到这个消息。 我无法find任何设置,让用户select重新启用它的应用程序。 有谁知道这个解决scheme吗?
看起来像iOS 5.1打破了标准的URL编码导航用户偏好。 例如: [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=TWITTER"]]; 适用于iOS 5.0,但不适用于iOS 5.1(包括设备和模拟器)。 有没有人find了在iOS 5.1中复制这个function的方法?
我正在玩idandersen的钥匙链的scifihifi-iphone代码,并遇到以下行为 – 我设置密码使用,说 [SFHFKeychainUtils storeUsername:@"User" andPassword:@"123" forServiceName:@"TestService" updateExisting:YES error:&error]; 然后从设备上删除testing应用程序,并再次安装 – 以前设置的密码似乎仍然在钥匙串… 这是预期的行为? 有没有办法确保我设置的密码将被删除与应用程序?
UIBarButtonItem有像Cancel,Done和其他一些标识符。 它们以文本显示给用户。 如果用户改变语言,例如取消button将被自动翻译。 作为开发人员,您无需为此button提供本地化string。 这意味着取消,完成和其他string已经本地化,并与操作系统。 这里有一种方法来获得这个string编程? 我不想添加额外的string到本地化文件。 如果有可能访问那么这将是非常好的。
多年来,我一直在追踪一个名为Target-Action的伟大模式,如下所示: 一个对象在时间到来时调用指定的目标对象上的指定select器。 这在很多不同的情况下非常有用,你需要一个简单的callback方法。 这是一个例子: – (void)itemLoaded { [specifiedReceiver performSelector:specifiedSelector]; } 在ARC之下,现在我们发现这样做突然变得危险了。 Xcode抛出一个警告,如下所示: PerformSelector可能会导致泄漏,因为它的select器是未知的 当然,select器是未知的,因为作为Target-Actiondevise模式的一部分,您可以指定任何您想要的select器,以便在发生有趣的事情时接听电话。 这个警告最让我感到困惑的是它说可能会有潜在的内存泄漏。 根据我的理解,ARC不会弯曲内存pipe理规则,而只是在正确的位置自动插入保留/释放/自动释放消息。 另外需要注意的是:-performSelector:有一个id返回值。 如果该方法返回+1保留计数对象,则ARC通过应用命名约定来分析方法签名。 在这种情况下,ARC不知道select器是否是-newFooBar工厂,或者只是调用一个不可靠的工作者方法(反正Target-Action几乎总是这样)。 其实ARC应该已经认识到我不期望有一个返回值,因此忘记了任何潜在的+1保留计数的返回值。 从这个angular度来看,我可以看到ARC从哪里来,但仍然存在着太多的不确定性,这在实践中意味着什么。 那现在是否意味着在ARC之下会出现什么问题呢? 我不明白这是如何产生内存泄漏的。 有人可以举例说明这样做的危险性,以及在这种情况下如何产生泄漏? 我真的从互联网上下了地狱,但没有find任何网站解释为什么 。
我读了这个和那个 。 我完全需要这个: 1.4324 =>“1.43” 9.4000 =>“9.4” 43.000 =>“43” 9.4 =>“9.40”(错误) 43.000 =>“43.00”(错误) 在这两个问题的答案指向NSNumberFormatter 。 所以应该很容易实现,但不适合我。 – (void)viewDidLoad { [super viewDidLoad]; UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectMake(50, 100, 200, 20)]; NSNumberFormatter *doubleValueWithMaxTwoDecimalPlaces = [[NSNumberFormatter alloc] init]; [doubleValueWithMaxTwoDecimalPlaces setNumberStyle:NSNumberFormatterDecimalStyle]; [doubleValueWithMaxTwoDecimalPlaces setPaddingPosition:NSNumberFormatterPadAfterSuffix]; [doubleValueWithMaxTwoDecimalPlaces setFormatWidth:2]; NSNumber *myValue = [NSNumber numberWithDouble:0.01234]; //NSNumber *myValue = [NSNumber numberWithDouble:0.1]; myLabel.text = [doubleValueWithMaxTwoDecimalPlaces […]