Tag: objective c

什么是解决Objective-C命名空间碰撞的最好方法?

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,使这成为可能?

我如何实现与ARC兼容的Objective-C单例?

如何转换(或创build)在Xcode 4.2中使用自动引用计数(ARC)时编译和行为正确的单例类?

我怎样才能使一个视图或图像沿着弯曲的path运动?

我正在开发一个商业应用程序。 当我将商品添加到购物车时,我想创build一个效果,其中商品的图像沿着弯曲的path行进,并在购物车标签处结束。 我怎样才能创build一个像这样的曲线的图像animation?

如何按比例缩放UIImageView?

我有一个UIImageView和目标是通过给它一个高度或宽度按比例缩小它。 UIImage *image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://farm4.static.flickr.com/3092/2915896504_a88b69c9de.jpg"]]]; UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; //Add image view [self.view addSubview:imageView]; //set contentMode to scale aspect to fit imageView.contentMode = UIViewContentModeScaleAspectFit; //change width of frame CGRect frame = imageView.frame; frame.size.width = 100; imageView.frame = frame; 图像确实被调整了大小,但位置不在左上angular。 缩放图像/ imageView的最佳方法是什么?如何纠正位置?

如何使用用Interface Builder创build的nib文件加载UIView

我试图做一些细致的事情,但应该是可能的。 所以这里是你所有的专家的挑战(这个论坛是你们很多的:))。 我正在创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类。

如何在执行API时避免在块中捕获自己?

我有一个工作的应用程序,我正在将其转换为Xcode 4.2中的ARC。 其中一个预先检查的警告涉及在一个导致保留周期的块中强烈地捕获self 。 我已经做了一个简单的代码示例来说明问题。 我相信我明白这意味着什么,但我不确定实施这种情况的“正确”或推荐的方式。 self是类MyAPI的一个实例 下面的代码被简化为只显示与我的问题相关的对象和块的交互 假设MyAPI从远程源获取数据,MyDataProcessor使用该数据并生成输出 处理器configuration有块来传输进度和状态 代码示例: // code sample self.delegate = aDelegate; self.dataProcessor = [[MyDataProcessor alloc] init]; self.dataProcessor.progress = ^(CGFloat percentComplete) { [self.delegate myAPI:self isProcessingWithProgress:percentComplete]; }; self.dataProcessor.completion = ^{ [self.delegate myAPIDidFinish:self]; self.dataProcessor = nil; }; // start the processor – processing happens asynchronously and the processor is released in the […]

将HEX NSString转换为NSData

我试图将hexNSString转换为NSData (我使用下面的附加代码)。 以下是输出: <00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000> 这看起来与我完全无关。 任何想法/build议哪里出错? NSString *strData = @"72ff63cea198b3edba8f7e0c23acc345050187a0cde5a9872cbab091ab73e553"; NSLog(@"string Data length is %d",[strData length]); NSMutableData *commandToSend= [[NSMutableData alloc] init]; unsigned char whole_byte; char byte_chars[2]; int i; for (i=0; i < [strData length]/2; i++) { byte_chars[0] = [strData characterAtIndex:i*2]; byte_chars[1] = [strData characterAtIndex:i*2+1]; whole_byte = strtol(byte_chars, NULL, […]

在iOS上为NSFileManager获得root权限(越狱)

我正在尝试将文件写入设备的根分区。 这是一个越狱应用程序,所以它被安装在/应用程序。 使用NSFileManager写入根文件系统时,写入失败,并显示“权限被拒绝”错误。 这似乎是我的应用程序不是以root身份运行。 它被安装在/ Applications中。 我的应用程序如何能成为根?

如何检查两个其他NSDate之间是否发生NSDate

我试图找出当前date是否在使用NSDate的date范围内。 例如,您可以使用NSDate获取当前date/时间: NSDate rightNow = [NSDate date]; 然后我想用这个date来检查它是否在9AM – 5PM的范围内。

在UITableView中延迟加载图像

我有我的UITableView 50个自定义单元格。 我想显示一个图像和一个标签在单元格中,我从URL获取图像。 我想做一个懒惰的图像加载,以便在加载图像时UI不会冻结。 我试图在单独的线程获取图像,但我必须加载每个图像每次细胞变得可见(否则重复使用单元格显示旧图像)。 有人可以告诉我如何复制这种行为。