Questions tagged «objective-c»

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

24
Xcode构建失败“体系结构x86_64的未定义符号”
Xcode初学者的问题: 这是我第一次使用Xcode 4.6.3。 我正在尝试编写一个非常简单的控制台程序,该程序搜索配对的BT设备并将其打印到NSLog。 生成时出现以下错误: Undefined symbols for architecture x86_64: "_OBJC_CLASS_$_IOBluetoothDevice", referenced from: objc-class-ref in main.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) 我疯狂地搜寻。常见的问题应该是对文件的引用,该文件仅导入了头文件,而链接器未找到任何实现(* .m文件)。但是,IOBluetooth库是一个类似于Foundation框架的标准框架。 我在上述声明中缺少什么? 我也尝试过为32位计算机构建它(构建再次失败)。显然这是一个链接器错误,但是我不知道它与它之间的关系,除了在x86和x64体系结构上查找IOBluetoothDevice的实现存在问题之外,而头文件来自一个包含在标准中的Framework(称为IO蓝牙? 供您参考,我的主要代码“ main.m”为: #import <Foundation/Foundation.h> #import <IOBluetooth/objc/IOBluetoothDevice.h> // Note the …

9
用块保留“ self”上的循环
恐怕这个问题是很基本的,但是我认为它与许多进入块的Objective-C程序员有关。 我所听到的是,由于块将捕获在其中引用的局部变量作为const副本捕获,self因此,如果要复制该块,则在块内使用会导致保留周期。因此,我们应该用来__block强制直接处理该块,self而不是复制它。 __block typeof(self) bself = self; [someObject messageWithBlock:^{ [bself doSomething]; }]; 而不只是 [someObject messageWithBlock:^{ [self doSomething]; }]; 我想知道的是以下内容:如果是这样,是否有办法避免丑陋(除了使用GC外)?


13
Objective-C可以打开NSString吗?
有没有更聪明的方式来重写呢? if ([cardName isEqualToString:@"Six"]) { [self setValue:6]; } else if ([cardName isEqualToString:@"Seven"]) { [self setValue:7]; } else if ([cardName isEqualToString:@"Eight"]) { [self setValue:8]; } else if ([cardName isEqualToString:@"Nine"]) { [self setValue:9]; }

3
ARC和桥接铸造
使用ARC,我无法再转换CGColorRef为id。我了解到我需要进行桥接。根据c文件: 一桥连投是C样式转换标注有三个关键字之一: (__bridge T) op将操作数强制转换为目标类型T。如果T 是可保留对象指针类型,则op必须具有不可保留指针类型。如果T是不可保留的指针类型,则op必须具有可保留的对象指针类型。否则,演员表的格式不正确。没有所有权转移,并且ARC不插入保留操作。 (__bridge_retained T) op将必须具有可保留对象指针类型的操作数强制转换为必须是不可保留指针类型的目标类型。ARC保留该值,但要对本地值进行通常的优化,并且接收方负责平衡+1。 (__bridge_transfer T) op将必须具有不可保留的指针类型的操作数强制转换为必须是可保留的对象指针类型的目标类型。ARC将在封闭的全表达式结束时释放该值,但要对本地值进行通常的优化。 这些转换是必需的,以便在ARC控制中进出对象。请参阅有关可保留对象指针的转换部分的基本原理。 仅使用a __bridge_retained或__bridge_transfercast来说服ARC分别发出不平衡的保留或释放是不好的形式。 我会在哪种情况下使用它们? 例如,CAGradientLayer具有一个colors接受CGColorRefs 数组的属性。我的猜测是我应该__brige在这里使用,但是不清楚为什么应该(或者不应该)。

4
NSInvalidUnarchiveOperationException:无法实例化名为NSLayoutConstraint的类
我对此很陌生。我逐步遵循了Apple为iPhone项目“ HelloWorld”编写的教程。我在iPhone 5.0模拟器中运行了它,然后它崩溃了: 2012-11-02 14:46:06.782 HelloWorld [9880:c07] *由于未捕获的异常'NSInvalidUnarchiveOperationException'而终止应用程序,原因:'无法实例化名为NSLayoutConstraint的类'*第一个调用堆栈:(0x14a2052 0xea2d0a 0x144aa78 0x144a9e9 0x32f7d9 0x32f7d7 0x32f7d9 0x32f6b7 0x23036d 0xd7e2c 0xd83a9 0xd85cb 0x38a73 0x38ce2 0x38ea8 0x3fd9a 0x10be6 0x118a6 0x20743 0x211f8 0x14aa9 0x138cfa9 0x14761c5 0x13db022 0x13d990a 0x13d8db4 0x13d8ccb 0x112a7 0x12a9b 0x1fed 0x1f15为0x1)终止叫做抛出异常(LLDB) 有人可以告诉我出了什么问题吗?我正在使用Xcode 4.5。

18
如何将本地HTML文件加载到UIWebView中
我正在尝试将html文件加载到我的UIWebView中,但是它将不起作用。这是阶段:在我的项目中有一个名为html_files的文件夹。然后,我在界面构建器中创建了一个webView,并在viewController中为其分配了出口。这是我用来附加html文件的代码: -(void)viewDidLoad { NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"html" inDirectory:@"html_files"]; NSData *htmlData = [NSData dataWithContentsOfFile:htmlFile]; [webView loadData:htmlData MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:[NSURL URLWithString:@""]]; [super viewDidLoad]; } 那是行不通的,UIWebView是空白的。我将不胜感激。

4
视图控制器之间进行通信的最佳方式是什么?
作为对Objective-C,可可和iPhone开发人员的新手,我强烈希望充分利用语言和框架。 我正在使用的资源之一是斯坦福大学的CS193P类笔记,它们已经留在网上了。它包括讲义,作业和示例代码,并且由于该课程是由Apple开发人员提供的,因此我绝对认为它是“从马口算起的”。 课堂网站:http: //www.stanford.edu/class/cs193p/cgi-bin/index.php 第08课与构建基于UINavigationController的应用程序有关,该应用程序将多个UIViewControllers推送到UINavigationController堆栈上。这就是UINavigationController的工作方式。这是合乎逻辑的。但是,幻灯片中有一些关于UIViewController之间进行通信的严厉警告。 我将从这些严肃的幻灯片中引用:http : //cs193p.stanford.edu/downloads/08-NavigationTabBarControllers.pdf 第16/51页: 如何不共享数据 全局变量或单例 这包括您的应用程序委托 直接依赖关系使代码的可重用性降低 而且更难调试和测试 好。我对此感到沮丧。不要盲目地将用于在viewcontroller之间进行通信的所有方法扔到您的应用程序委托中,并在应用程序委托方法中引用viewcontroller实例。公平的诺夫。 再进一步,我们得到这张幻灯片,告诉我们应该做什么。 第18/51页: 数据流最佳实践 弄清楚究竟需要传达什么 为您的视图控制器定义输入参数 为了在层次结构之间进行通讯,请使用松散耦合 为观察者定义通用接口(例如委派) 然后,在此幻灯片之后是看似占位符的幻灯片,在该幻灯片中,讲师显然使用UIImagePickerController的示例演示了最佳实践。我希望这些视频可用!:( 好的,所以...我怕我的objc-fu不太牢固。我也对上面引用的最后一行感到困惑。我一直在尽职调查这个问题,发现似乎是一篇体面的文章,在谈论观察/通知技术的各种方法:http : //cocoawithlove.com/2008/06/five-approaches-to -listening-observing.html 方法5甚至将委托表示为方法!除了...对象只能一次设置一个委托。因此,当我有多个ViewController通讯时,我该怎么办? 好的,那是设置帮派。我知道我可以通过引用appdelegate中的多个viewcontroller实例轻松地在应用程序委托中执行通信方法,但是我想以正确的方式进行此类操作。 请回答以下问题,以帮助我“做正确的事”: 当我尝试在UINavigationController堆栈上推送新的viewcontroller时,谁应该执行此推送。 我的代码中哪个类/文件是正确的位置? 当我想影响一些数据块(伊娃的值),我UIViewControllers之一,当我在不同的UIViewController,什么是“正确”的方式做到这一点? 假设我们一次只能在一个对象中设置一个委托,那么当讲师说“为观察者定义通用接口(如委托)”时,实现将是什么样子。如果可能的话,一个伪代码示例将非常有帮助。

9
在Objective-C中,为什么要检查self = [super init]是否不为零?
我有一个关于在Objective-C中编写init方法的一般问题。 我到处都看到(Apple的代码,书籍,开放源代码等),init方法应该在继续初始化之前检查self = [super init]是否不为零。 用于init方法的默认Apple模板是: - (id) init { self = [super init]; if (self != nil) { // your code here } return self; } 为什么? 我的意思是init什么时候会返回nil?如果我在NSObject上调用init并返回nil,那么一定要搞砸了,对吧?在这种情况下,您甚至不编写程序... 类的init方法返回nil真的很常见吗?如果是这样,在什么情况下,为什么?
165 objective-c  null  init 

14
Xcode调试器不会打印对象,并且在不显示对象时显示nil
当尝试使用来打印对象时po <objectName>,Xcode显示错误,但仅针对一个项目。 错误:无法实现结构:变量<varName>的大小与ValueObject的大小不一致在Execute中出错,无法PrepareToExecuteJITExpression Xcode调试器还会将所有未显示的对象显示为nil(已self排除)(NSLog显示正确的输出,如图中所示)。我不知道该项目出了什么问题。其他所有项目都可以正常工作。 知道会是什么吗?(清洁项目无效。)

7
命名Swift文件以向现有对象添加扩展名的最佳实践是什么?
如语言规范中所述,可以使用扩展将扩展添加到现有的Swift对象类型。 结果,可以创建扩展,例如: extension String { var utf8data:NSData { return self.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)! } } 但是,包含此类扩展名的Swift源文件的最佳命名做法是什么? 过去,惯例是extendedtype+categoryname.m用于Objective-C指南中讨论的Objective-C类型。但是Swift示例没有类别名称,并且调用它String.swift似乎不合适。 所以问题是:给定以上String扩展名,swift源文件应调用什么?
165 ios  objective-c  swift  xcode 

11
如何将方法调用延迟1秒钟?
有一种简单的方法可以将方法调用延迟1秒吗? 我UIImageView对触摸事件有反应。当检测到触摸时,应用中会发生一些动画。一秒钟后,我想调用另一个方法。在这种情况下,我不能使用animationDidStop选择器。

13
隐藏了UIViews的自动布局?
我觉得这UIViews通常UILabels是根据业务逻辑来显示/隐藏的一种相当常见的范例。我的问题是,使用AutoLayout响应隐藏视图的最佳方法是什么,就像它们的框架是0x0一样。这是1-3个功能的动态列表的示例。 现在,从按钮到最后一个标签,我有10px的顶部空间,当标签隐藏时,它显然不会向上滑动。到目前为止,我已经创建了此约束的出口,并根据要显示的标签数修改常数。因为我使用负常量值将按钮向上推到隐藏帧上,所以这显然有点不客气。这也很糟糕,因为它不限于实际的布局元素,仅基于已知高度/其他元素的填充进行隐蔽的静态计算,并且显然与AutoLayout的用途有所抵触。 很明显,我可以根据我的动态标签创建新的约束,但这要尝试折叠一些空白,这需要大量的微观管理和冗长的工作。有更好的方法吗?更改帧大小0,0并让AutoLayout无需约束即可操作吗?完全删除视图? 坦白说,仅从隐藏视图的上下文中修改常量就需要一行代码,并且计算简单。重新创建新的约束 constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:似乎很繁重。 编辑二月2018:看到本的答案与UIStackViews

3
什么是Objective C ++?[关闭]
在这里很难说出要问什么。这个问题是模棱两可,含糊不清,不完整,过于宽泛或夸张的,不能以目前的形式合理地回答。如需帮助澄清此问题以便可以重新打开, 请访问帮助中心。 7年前关闭。 什么是Objective C ++,我可以在Xcode中使用这种语言吗?

12
如何摆脱“未声明选择器”警告
我想在NSObject实例上使用选择器,而不需要已实现的协议。例如,如果要调用的NSObject实例支持它,则有一个category方法应该设置一个error属性。这是代码,并且代码按预期工作: if ([self respondsToSelector:@selector(setError:)]) { [self performSelector:@selector(setError:) withObject:[NSError errorWithDomain:@"SomeDomain" code:1 userInfo:nil]]; } 但是,编译器看不到带有setError:签名的任何方法,因此对于包含该@selector(setError:)代码段的每一行,它都会向我发出警告: Undeclared selector 'setError:' 我不想声明一个协议来摆脱此警告,因为我不希望所有可能使用此协议的类实现任何特殊的东西。按照约定,我希望它们具有setError:方法或属性。 这可行吗?怎么样? EP,干杯

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.