Questions tagged «objective-c»

仅在有关Objective-C功能或取决于语言代码的问题上使用此标记。标签[cocoa]和[cocoa-touch]应该用于询问Apple的框架或类。使用相关标签[ios],[macos],[apple-watch]和[tvos]来解决特定于这些平台的问题。

7
如何在NSUserDefaults中存储自定义对象
好吧,所以我一直在闲逛,我意识到我的问题,但是我不知道如何解决。我做了一个自定义类来保存一些数据。我为此类制作对象,并且需要它们在会话之间持续。在我将所有信息放入之前NSUserDefaults,这是行不通的。 -[NSUserDefaults setObject:forKey:]: Attempt to insert non-property value '<Player: 0x3b0cc90>' of class 'Player'. 这是我将自定义类“ Player”放入时收到的错误消息NSUserDefaults。现在,我已经读过,显然NSUserDefaults只存储了某些类型的信息。那么我如何把我的东西放进NSUSerDefaults去呢? 我读到应该有一种方法来“编码”我的自定义对象,然后将其放入,但是我不确定如何实现它,将不胜感激!谢谢! ****编辑**** 好的,所以我使用下面给出的代码(谢谢!),但是我仍然遇到一些问题。基本上,代码现在崩溃了,我不确定为什么,因为它不会给出任何错误。也许我缺少一些基本知识,但我太累了,但是我们会看到的。这是我的Custom类“ Player”的实现: @interface Player : NSObject { NSString *name; NSNumber *life; //Log of player's life } //Getting functions, return the info - (NSString *)name; - (int)life; - (id)init; //These are the setters - …

26
无法在iOS7中隐藏状态栏
我刚刚将iPhone 5 iOS 7升级到了四个Beta版本。现在,当我在此iPhone上从Xcode 5运行我的应用程序时,状态栏不会隐藏,即使应该隐藏。 不起作用: [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade]; 不起作用: [UIApplication sharedApplication].statusBarHidden = YES; 无法登录苹果开发者论坛

16
覆盖isEqual:和哈希的最佳实践
您如何isEqual:在Objective-C中正确覆盖?“捕获”似乎是如果两个对象相等(由isEqual:方法确定),则它们必须具有相同的哈希值。 《可可基础知识指南》的 “ 内省”部分确实有一个示例,说明如何重写名为的类,如下所示:isEqual:MyWidget - (BOOL)isEqual:(id)other { if (other == self) return YES; if (!other || ![other isKindOfClass:[self class]]) return NO; return [self isEqualToWidget:other]; } - (BOOL)isEqualToWidget:(MyWidget *)aWidget { if (self == aWidget) return YES; if (![(id)[self name] isEqual:[aWidget name]]) return NO; if (![[self data] isEqualToData:[aWidget data]]) return NO; return …


30
检测设备是否为iPhone X
我的iOS应用使用自定义高度,UINavigationBar这会导致新iPhone X出现一些问题。 是否有人已经知道如何可靠地以编程方式(在Objective-C中)检测应用程序是否在iPhone X上运行? 编辑: 当然可以检查屏幕的大小,但是,我想知道是否有某种“内置”方法TARGET_OS_IPHONE可以检测iOS ... if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { CGSize screenSize = [[UIScreen mainScreen] bounds].size; if (screenSize.height == 812) NSLog(@"iPhone X"); } 编辑2: 我不认为我的问题是链接问题的重复。当然,有一些方法可以“测量”当前设备的不同属性,并使用结果来确定使用哪个设备。但是,这并不是我在第一个编辑中试图强调的真正问题。 实际的问题是:“是否可以直接检测当前设备是否为iPhone X(例如通过某些SDK功能),还是必须使用间接测量”? 根据到目前为止给出的答案,我认为答案是“不,没有直接的方法。测量是必经之路”。

25
无法在Objective-C中使用Swift类
我尝试将Swift代码集成到我的应用程序中,编写了我的应用程序Objective-C并添加了一个Swift类。我已经做了这里描述的一切。但是我的问题是Xcode还没有创建-Swift.h文件,只有桥接头文件。所以我创建了它,但是实际上它是空的。我可以在Swift中使用所有的ObjC类,但反之亦然。我用标记了我的快速班级,@objc但没有帮助。我现在能做什么? 编辑:苹果说:“当您将Swift代码导入Objective-C时,您依赖于Xcode-generated头文件将那些文件公开给Objective-C。 -Swift.h”。 现在,当我要导入该文件时,它给出了一个错误: //MainMenu.m #import "myProjectModule-Swift.h" //Error: 'myProjectModule-Swift.h' file not found @implementation MainMenu 这是我的FBManager.swift文件: @objc class FBManager: NSObject { var descr = "FBManager class" init() { super.init() } func desc(){ println(descr) } func getSharedGameState() -> GameState{ return GameState.sharedGameState() //OK! GameState is written in Objective-C and no error here } …
260 ios  objective-c  swift 

16
iOS检测用户是否在iPad上
我有一个可以在iPhone和iPod Touch上运行的应用程序,可以在Retina iPad上运行,但所有其他操作都需要进行一次调整。我需要检测当前设备是否是iPad。我可以使用什么代码检测用户是否正在使用iPad UIViewController,然后进行相应更改?
260 ios  objective-c  swift  ipad  device 



4
GCD在主线程中执行任务
我有一个可能来自任何线程的回调。当我收到此回调时,我想在主线程上执行某些任务。 我需要检查我是否已经在主线程上吗?或者通过调用下面的代码不执行此检查是否有任何损失? dispatch_async(dispatch_get_main_queue(), ^{ // do work here });

30
如何在iOS上找到最上方的视图控制器
现在,我遇到了两种情况,可以方便地找到“最顶层”视图控制器(负责当前视图的视图控制器),但还没有找到一种方法。 基本上,挑战是这样的:假设一个人正在一个不是视图控制器(或视图)的类中执行[并且没有活动视图的地址],并且没有传递最高视图控制器的地址(或者说导航控制器的地址),是否可以找到该视图控制器?(如果是的话,如何?) 否则,是否有可能找到最顶层的视图?


6
总是在ARC中将自身的弱引用传递给块吗?
我对Objective-C中的块用法有些困惑。我目前使用ARC,而我的应用程序中有很多块,当前总是引用self而不是弱引用。这可能是这些块保留self并阻止其分配的原因吗?问题是,我应该始终在块中使用的weak引用self吗? -(void)handleNewerData:(NSArray *)arr { ProcessOperation *operation = [[ProcessOperation alloc] initWithDataToProcess:arr completion:^(NSMutableArray *rows) { dispatch_async(dispatch_get_main_queue(), ^{ [self updateFeed:arr rows:rows]; }); }]; [dataProcessQueue addOperation:operation]; } ProcessOperation.h @interface ProcessOperation : NSOperation { NSMutableArray *dataArr; NSMutableArray *rowHeightsArr; void (^callback)(NSMutableArray *rows); } 流程操作 -(id)initWithDataToProcess:(NSArray *)data completion:(void (^)(NSMutableArray *rows))cb{ if(self =[super init]){ dataArr = [NSMutableArray arrayWithArray:data]; …



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.