我有两个view controllers A和B ,他们都有他们的代表。 当我什么也没做,除了在头文件的开头定义协议, #import另一个头文件,我得到了两个错误 – 无法find协议声明“BDelegate”,这是显示在啊(我写)无法find协议声明“ADelegate”,这是显示在Bh(我写了) 在网上看,人们之前写道,头文件的通告包含可能导致问题。 他们推荐使用#include代替,或者像@ @class A 代替 #import Ah 里面#import Bh 我已经尝试了几乎所有这些导入的组合, @classes和#include但仍然无法摆脱警告。 此外,在线解决schemebuild议将#import移动到.m文件,但这也没有帮助。 部分原因是,网上的解决scheme有点模糊 – 如果你能把它分解,那就太好了。 有什么build议可以做什么来解决这个问题? – BigViewController.h – #import "BaseViewController.h" #include "BaseViewController.h" @class BigViewController; @protocol BigViewControllerDelegate -(void) BigViewController:(BigViewController *) bigView; @end @interface BigViewController : UIViewController <BaseViewControllerDelegate> { //delegate id <BigViewControllerDelegate> delegate; ivars… } @properties… @end ————————————————– […]
到目前为止,我还没有find一个解决scheme,可以很好地从Objective C的pdf文件中提取文本,以便在iPhone上使用。 我发现了一些标准的C代码,并修改它的工作原理,并认为我会在这里提供它,因为到目前为止,我已经使用了stackoverflow很多,但从来没有回报。 你可以在这里: https : //github.com/zachron/pdfiphone 它将pdf文件的path作为input,并返回pdf中文本的nsstring。 我没有写大部分,但我修改了它,所以它可以与iPhone和Objective C一起工作。如果有人拿这个,你需要在你的项目中包含Zlib库(在iPhone上的libz.dylib)它更令人敬畏,那就是美好的时光。
我对Objective-C中的属性和实例variables感到困惑。 我是通过Aaron Hillegass的“Mac OS Xcocoa编程”的一半,一切都是合乎逻辑的。 你会像这样声明一个类: @class Something; @interface MyClass : NSObject { NSString *name; NSArray *items; Something *something; IBOutlet NSTextField *myTextField; } @property (nonatomic, retain) NSString *name; @property (nonatomic, retain) NSArray *items; 由于其他对象需要操作我们的name和items实例variables,因此我们使用@property / @synthesize为它们生成访问器/修改器。 在我们的类中,我们不使用访问器/增变器 – 我们只是直接与实例variables交互。 something只是一个实例variables,我们将在我们的类中使用,因为没有其他人需要使用它,所以我们不会为它创build一对访问器和增变器。 我们需要在UI中与文本字段交互,所以我们为它声明一个IBOutlet ,连接它,然后完成。 一切都很合乎逻辑 但是,在iPhone世界里,事情似乎有所不同。 人们为每个实例variables声明属性,为IBOutlets声明属性,并使用访问器/增变器与类中的实例variables进行交互(例如,它们会写[self setName:@"Test"]而不是name = @"Test" ) 。 为什么? 到底是怎么回事? 这些差异是iPhone特有的吗? 为所有实例variables声明属性,为IBOutlets声明属性以及在你自己的类中使用访问器/修改器有什么优势?
我知道IBInspectable-properties的默认值可以设置为: 在Swift中@IBInspectable var propertyName:propertyType = defaultValue 。 但是如何在Objective-C中实现类似的效果,以便我可以将某些属性的默认值设置为Interface Builder中的某些属性?
在某个(一致的)时候,当我的应用程序正在运行时,我始终得到xcode错误消息 由于内存错误而终止。 我找不到导致错误的代码,但是我可以告诉错误附近有什么代码(使用断点)。 这个错误是在我的实现中返回一个特定的单元格后直接导致的 – (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath UITableViewDataSource委托方法。 我可以确认它正在返回一个有效的UITableViewCell ,但我认为解释和发布整个方法将浪费你的时间。 不过,我怀疑这可能是由于内存的快速大量分配造成的。 它绝对说是Terminated due to memory error ,而不是内存压力Terminated due to memory error 。 我想知道消息是什么意思。 另外,有没有什么办法来debugging这个消息? 没有生成崩溃报告。 我正在使用ARC和iOS 7。
使用64位版本的iOS,我们不能再使用%d和%u来格式化NSInteger和NSUInteger 。 因为对于64位,这些是typedef'd long和unsigned long而不是int和unsigned int 。 所以如果你尝试用%d格式化NSInteger,Xcode会抛出警告。 Xcode对我们来说很好,并为这两种情况提供了一种替代scheme,它由l前缀格式说明符和longtypes组成。 那么我们的代码基本上是这样的: NSLog(@"%ld", (long)i); NSLog(@"%lu", (unsigned long)u); 如果你问我,这是一个痛苦的眼睛。 几天前,Twitter上有人提到了格式说明符%zd来格式化签名variables和%tu来格式化32和64位平台上的无符号variables。 NSLog(@"%zd", i); NSLog(@"%tu", u); 这似乎工作。 而我更喜欢types化。 但我真的不知道为什么这些工作。 现在这两个对我来说基本上都是神奇的价值。 我做了一些研究,发现z前缀表示以下格式说明符与size_t具有相同的大小。 但是我完全不知道前缀t是什么意思。 所以我有两个问题: %zd和%tu究竟是什么意思? 是否可以安全地使用%zd和%tu而不是Applebuild议将types转换为long? 我知道类似的问题和苹果64位转换指南,这些指南都推荐使用%lu (unsigned long)方法。 我要求一个替代types铸造。
2016-10-05 13:36:21.383340 MyApp[1867:72704] 0x60000015e350 Copy matching assets reply: XPC_TYPE_DICTIONARY <dictionary: 0x60000015e350> { count = 1, transaction: 0, voucher = 0x0, contents = "Result" => <int64: 0x600000226fe0>: 29 } 2016-10-05 13:36:21.385076 MyApp[1867:72704] 0x608000556420 Daemon configuration query reply: XPC_TYPE_DICTIONARY <dictionary: 0x608000556420> { count = 2, transaction: 0, voucher = 0x0, contents = "Dictionary" => <dictionary: 0x6080005566e0> { […]
在Objective-C中,我经常在处理块等时使用__typeof__(obj) 。为什么不使用__typeof(obj)或typeof(obj) 。 什么时候用哪个?
我有一个为iOS构build的非常小的Objective-C库,我想将它导出到Unity。 我理解编写一个csharp包装的基本过程,它将所有的调用整理到本地库,但我完全不知道从哪里开始。 任何人都可以请一步一步解释如何创build一个统一包与我的图书馆,所以我也可以分发给其他开发人员。 Unity3D文档非常简短,并没有解释任何东西。 谢谢。
是否可以重写在Objective-C中的运算符使用? 例如 myClassInstance + myClassInstance 调用一个自定义函数来添加这两个。