Objective-C没有名称空间; 这很像C,一切都在一个全局的命名空间。 通常的做法是用类名前缀加前缀,例如,如果你在IBM工作,你可以用“IBM”作为前缀。 如果你在微软工作,你可以使用“MS”; 等等。 有时候,首字母缩写是指项目,例如Adium在“AI”前加上类(因为没有任何公司可以采用这个缩写)。 苹果公司前缀与NS的类,并说这个前缀是只保留给苹果。 到目前为止这么好。 但是将2到4个字母附加到前面的类名是一个非常非常有限的名称空间。 例如,MS或AI可能具有完全不同的含义(例如,AI可能是人工智能),而其他开发人员可能会决定使用它们并创build一个同名的类。 砰 ,命名空间相撞。 好吧,如果这是你自己的类和你正在使用的外部框架之间的碰撞,你可以很容易地改变你的类的命名,没有什么大不了的。 但是,如果使用两个外部框架,那么这两个框架都没有源代码,而且不能更改? 您的应用程序与他们两个链接,你会得到名称冲突。 你将如何去解决这些问题? 什么是最好的方式来解决他们的方式,你仍然可以使用这两个类? 在C中,可以通过不直接链接到库来解决这些问题,而是使用dlopen()在运行时加载库,然后使用dlsym()查找要查找的符号并将其分配给全局符号可以用你喜欢的任何方式命名),然后通过这个全局符号来访问它。 例如,如果因为某个C库有一个名为open()的函数而发生冲突,则可以定义一个名为myOpen的variables,并指向该库的open()函数,因此,如果要使用系统open() ,你只需要使用open(),当你想使用另一个时,你可以通过myOpen标识符来访问它。 在Objective-C中有类似的可能性,如果不是的话,还有没有其他聪明的,棘手的解决scheme,你可以使用解决命名空间冲突? 有任何想法吗? 更新: 为了澄清这个问题:如何避免命名空间冲突或如何创build一个更好的命名空间的答案当然是受欢迎的; 然而,我不会接受他们作为答案,因为他们不能解决我的问题。 我有两个图书馆,他们的class名相撞。 我不能改变他们; 我没有任何一个的来源。 碰撞已经在那里,如何提前避免的提示将无济于事。 我可以将它们转发给这些框架的开发人员,并希望他们将来能够select一个更好的名称空间,但是目前我正在寻找一种解决scheme,在单个应用程序中使用框架。 任何解决scheme,使这成为可能?
我试图做一些细致的事情,但应该是可能的。 所以这里是你所有的专家的挑战(这个论坛是你们很多的:))。 我正在创build一个调查问卷的“组件”,我想加载一个NavigationContoller (我的QuestionManagerViewController )。 “组件”是一个“空的” UIViewController ,它可以根据需要回答的问题加载不同的视图。 我这样做的方式是: 创buildQuestion1View对象作为UIView子类,定义一些IBOutlets 。 创build(使用界面生成器) Question1View.xib (这里是我的问题可能是 )。 我将UIViewController和UIView都设置为Question1View类。 我使用视图的组件(使用IB)链接sockets。 我重写我的QuestionManagerViewController的initWithNib看起来像这样: – (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { if (self = [super initWithNibName:@"Question1View" bundle:nibBundleOrNil]) { // Custom initialization } return self; } 当我运行代码,我得到这个错误: 2009-05-14 15:05:37.152 iMobiDines [17148:20b]由于未捕获的exception' NSInternalInconsistencyException ',原因:' -[UIViewController _loadViewFromNibNamed:bundle:]加载了“Question1View”没有设置。 我敢肯定,有一种方法可以使用nib文件加载视图,而不需要创build一个viewController类。
我的login视图有一个子视图,它有一个UIActivityView和一个UILabel说“正在login…”。 这个子视图有不圆的angular落。 我怎样才能使他们圆? 有没有办法在我的xib内部做到这一点?
我有一个string,包含当前date使用这个: NSString *date = [[NSDate date] description]; 在不同的点我想从这个string检索date,我用下面的代码: [NSDateFormatter setDefaultFormatterBehavior:NSDateFormatterBehavior10_4]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; //[NSDateFormatter setDefaultFormatterBehavior:NSDateFormatterBehaviorDefault]; [dateFormatter setDateFormat:@"YYYY-MM-DD HH:MM:SS ±HHMM"]; NSDate *dateFromString = [[NSDate alloc] init]; dateFromString = [dateFormatter dateFromString:<NSString containing date>]; 我得到dateFromString nil 0x0。 我究竟做错了什么?
UIDevice.orientation的可能值包括UIDeviceOrientationFaceUp和UIDeviceOrientationFaceDown 。 虽然知道设备是平坦的可能是有用的,但是这并不能告诉我们是否平面显示以纵向或横向模式定向的界面。 在设备返回模糊信息的情况下,有没有办法findGUI的当前方向? 我想我可以跟踪方向更改事件记住最后的肖像/风景方向或检查主UIView的界限的高度和宽度,但似乎kludgey。 设备上有没有属性或UIView,我错过了?
我试图找出当前date是否在使用NSDate的date范围内。 例如,您可以使用NSDate获取当前date/时间: NSDate rightNow = [NSDate date]; 然后我想用这个date来检查它是否在9AM – 5PM的范围内。
我正在浏览斯科特·史蒂文森(Scott Stevenson)维护的精彩博客,我正在尝试理解一个基本的Objective-C概念,即为代理赋予“赋值”属性和“保留”属性。 注意,这两者在垃圾收集环境中是相同的。 我主要关心的是基于非GC的环境(例如:iPhone)。 直接从斯科特的博客: “assign关键字将生成一个setter,它将值直接赋值给实例variables,而不是复制或保留它,这对于像NSInteger和CGFloat这样的原始types,或者不是直接拥有的对象,比如委托,是最好的。 这是什么意思,你不直接拥有委托对象? 我通常会保留我的代表,因为如果我不想让他们走进深渊,保留会照顾到我的。 我通常将UITableViewController从其各自的dataSource和委托中抽象出来。 我也保留那个特定的对象。 我想确保它永远不会消失,所以我的UITableView始终有其委托。 有人可以进一步解释我在哪里/为什么是错的,所以我可以理解Objective-C 2.0编程中使用assign属性而不是retain的常用范例吗? 谢谢!
我想自定义分组样式的UITableView的背景和边框颜色。 我能够通过使用以下自定义背景颜色: tableView.contentView.backgroundColor = [UIColor greenColor]; 但边框颜色仍然是我不知道如何改变的东西。 如何自定义分组式表视图的这两个方面?
我很想在UIToolbar创build一个“后退”左箭头挡板button。 据我所知,获得其中一个的唯一方法是将UINavigationController保留在默认设置下,并使用左边栏项。 但是,我无法将其创build为UIBarButtonItem ,因此我无法在标准UIToolbar创build一个,即使它们与UINavigationBar非常相似。 我可以手动创buildbutton图像,但我无法find任何地方的源图像。 他们有阿尔法通道边缘,所以截图和切割不会得到非常灵活的结果。 除了我打算使用的每种尺寸和颜色scheme的屏幕截图以外的任何想法? 更新:请停止避免这个问题,并build议我不应该问这个,应该使用UINavigationBar 。 我的应用程序是Instapaper Pro。 它只显示一个底部工具栏(为了节省空间和最大化可读内容区域),并且我希望在底部放置一个左箭头形的返回button。 告诉我,我不应该这样做,这不是一个答案 ,当然不值得一个赏金。
我如何计算在UITableViewCell UITextView在iOS 7中的高度? 我在类似的问题上find了很多答案,但是sizeWithFont:参与了每个解决scheme,并且这个方法已经被弃用了! 我知道我必须使用- (CGFloat)tableView:heightForRowAtIndexPath:但我如何计算我的TextView需要显示整个文本的高度?