在我的应用程序中,我推一个视图控制器(一个UITableViewController),也有一个属性/sockets引用UITableViewCell。 看来,创build控制器: PreferencesController *pController = [[PreferencesController alloc] init]; 不会为xib文件中的UITableViewCell创build对象,因此出口为空,因此表加载会生成exception。 我解决了这个问题: PreferencesController *pController = [[PreferencesController alloc] initWithNibName:@"PreferencesController" bundle:nil]; 但我没有真正明白为什么它的工作,从文档看来init应该足以加载相关的nib文件(PreferencesController.xib)。
其实我正在开发一个启用了ARC的项目。 我知道使用alloc和init正在取得对象的ownership 。 我知道,如果我创build一个像这样的string NSString *myString = [[NSString alloc]initWithFormat:@"Something"]; 那么我需要release我自己的myString 。 如果我使用ARC启用? 我无法释放自己。 那么它会造成泄漏? 还是我不应该这样创build对象? 我也可以像下面的代码一样创build一个string。 NSString *myString = [NSString stringWithFormat:@"Something"]; 但是,我需要准确使用ARC启用项目的types? 如果我使用第一种types会发生什么?
我跟随Swift和Objective-C运行时 ,它适用于正常的方法。 我喜欢swizzle init方法,从我的理解来看,init就像是一个类方法。 所以我尝试作为实例和类方法swizzling初始化。 但似乎没有工作 我可以使用Objective C工作,只是想知道如何使它在Swift中工作 从我的要点摘录 dispatch_once(&Static.token) { let originalSelector = Selector("init:source:destination:") let swizzledSelector = Selector("ftg_init:source:destination:") let originalMethod = class_getClassMethod(self, originalSelector) let swizzledMethod = class_getClassMethod(self, swizzledSelector) let didAddMethod = class_addMethod(self, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod)) if didAddMethod { class_replaceMethod(self, swizzledSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod)) } else { method_exchangeImplementations(originalMethod, swizzledMethod); } }
我有一个具有两个属性, name和message的类Message ,以及具有两个文本字段nameField和messageField另一个类MessageController 。 我想在MessageController创build一个Message的实例,传递这两个属性作为参数。 现在,我正在这样做: Message *messageIns = [[Message alloc] init]; messageIns.name = nameField; messageIns.message = MessageField; 如何在创build实例时传递值? 我试图重新定义Message.m中的init ,但我不知道如何做到这一点。 -(id)init{ if((self=[super init])){ } return self; } 请帮忙。
我熟悉为我自己的UIView子类创buildXIB的大部分过程,但并不是所有事情都适合我,主要是与IBOutlets连接起来。 我可以让他们看起来像一个迂回的方式工作。 我的设置是这样的: 我有MyClass.h和MyClass.m。 他们有一个UIView(称为视图)和一个UILabel(称为myLabel)的IBOutlets。 我添加了“视图”属性,因为在线上的一些示例似乎表明你需要这个,它实际上解决了一个问题,因为它无法find视图属性,我猜甚至在UIView父类。 我有一个名为MyClass.xib的XIB文件,它的文件所有者自定义类是MyClass,它在我的.h和.m文件存在之后正确预先填充。 我的init方法是我有问题的地方。 我尝试使用NSBundle的mainBundle的“loadNibNamed”方法,并将所有者设置为“自我”,希望我会创build视图的实例,它会自动得到它的出口匹配到我的课(我知道如何做到这一点,我很小心)。 然后我想我想让自己等于那个笔尖的索引0处的子视图,而不是这样做 self = [super init]; 或类似的东西。 我觉得我在这里做错了,但在线示例在init方法中有类似的事情,但他们将该子视图0分配给视图属性,并添加它作为一个孩子 – 但是那不是总共两个MyClass实例? 一个基本上与IBOutlets无关,包含通过loadNibNamed实例化的子MyClass? 或者至多,是不是一个MyClass实例与一个额外的中介UIView包含我最初希望作为MyClass的直接子项目的所有IBOutlets? 当涉及到像instanceOfMyClass.frame.size.width这样的事情时,这会带来一些烦恼,因为它会返回0,当引入的子UIView返回我正在寻找的实际框架大小。 是我做错了,我搞乱loadNibNamed在init方法内? 我应该做更像这样的事情吗? MyClass *instance = [[MyClass alloc] init]; [[NSBundle mainBundle] loadNibNamed:@"MyClass" owner:instance options:nil]; 或者像这样? MyClass *instance = [[[NSBundle mainBundle] loadNibNamed:@"MyClass" owner:nil options:nil] objectAtIndex:0]; 预先感谢任何帮助。