Questions tagged «objective-c»

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

4
Swift:自定义ViewController初始化程序
如何UIViewController在Swift的子类中添加自定义初始化程序? 我创建了一个UIViewController类似于以下内容的子类: class MyViewController : UIViewController { init(leftVC:UIViewController, rightVC:UIViewController, gap:Int) { self.leftVC = leftVC; self.rightVC = rightVC; self.gap = gap; super.init(); setupScrollView(); setupViewControllers(); } } 当我运行它时,出现致命错误: 致命错误:对类“ MyApp.MyViewController”使用未实现的初始化程序“ init(nibName:bundle :)” 我读过elewhere,添加自定义初始化程序时还必须覆盖它,init(coder aDecoder:NSCoder)所以让我们覆盖它init,看看会发生什么: override init(coder aDecoder: NSCoder) { super.init(coder: aDecoder); } 如果添加此代码,Xcode会抱怨self.leftVC is not initialized at super.init call。所以我想那也不是解决方案。所以我想知道如何ViewController在Swift中的子类中正确添加自定义初始化程序(因为在Objective-C中这似乎不是问题)?


16
删除所有影响UIView的约束
我有一个通过多个约束放置在屏幕上的UIView。某些约束由超级视图拥有,而其他约束则由其他祖先拥有(例如,UIViewController的view属性)。 我想删除所有这些旧约束,并使用新约束将其放置在新位置。 在不为每个约束创建IBOutlet且必须记住哪个视图拥有所述约束的情况下,如何做到这一点? 详细地说,幼稚的方法是为每个约束创建一堆IBOutlet,然后涉及调用代码,例如: [viewA removeConstraint:self.myViewsLeftConstraint]; [viewB removeConstraint:self.myViewsTopConstraint]; [viewB removeConstraint:self.myViewsBottomConstraint]; [self.view removeConstraint:self.myViewsRightConstraint]; 此代码的问题在于,即使在最简单的情况下,我也需要创建2个IBOutlet。对于复杂的布局,这可以轻松达到4或8个所需的IBOutlets。此外,我需要确保在适当的视图上正在调用删除约束的调用。例如,假设myViewsLeftConstraint归拥有viewA。如果我不小心打了电话[self.view removeConstraint:self.myViewsLeftConstraint],什么也不会发生。 注意:方法constraintsAffectingLayoutForAxis看起来很有希望,但仅用于调试目的。 更新:很多我收到处理问题的答案self.constraints,self.superview.constraints或一些人的变种。这些解决方案将不起作用,因为这些方法仅返回视图所拥有的约束,而不会影响那些约束视图。 为了阐明这些解决方案的问题,请考虑以下视图层次结构: 祖父 父亲 我 儿子 女儿 哥哥 叔叔 现在想象我们创建以下约束,并将它们始终附加到最接近的共同祖先: C0:我:与儿子(我拥有)同上 C1:我:宽度= 100(属于我) C2:我:与兄弟(父亲拥有)相同的身高 C3:我:和叔叔一样(祖父拥有) C4:我:与祖父(祖父拥有)同左 C5:兄弟:与父亲相同(父亲拥有) C6:叔叔:与祖父(祖父拥有)相同 C7:儿子:和女儿(我所有)同左 现在想象我们要删除所有影响的约束Me。任何适当的解决方案都应该删除,[C0,C1,C2,C3,C4]并且别无其他。 如果我使用self.constraints(自我就是我),我将得到[C0,C1,C7],因为这些是我所拥有的唯一约束。显然,仅仅删除它是不够的,因为它丢失了[C2,C3,C4]。此外,它是C7不必要地删除。 如果我使用self.superview.constraints(自我就是我),我会得到[C2,C5],因为那是父亲的约束。显然,我们无法删除所有这些内容,因为它们C5与完全无关Me。 如果我使用grandfather.constraints,我会得到[C3,C4,C6]。同样,我们不能删除所有这些内容,因为它们C6应保持不变。 蛮力方法是循环在每个视图的祖先(包括其本身)的,并且如果看到firstItem或secondItem是视图本身; 如果是这样,请删除该约束。这将导致正确的解决方案,return [C0,C1,C2,C3,C4],并且仅是那些约束。 但是,我希望有一个比必须遍历整个祖先列表更优雅的解决方案。

13
iPhone:设置导航栏标题
大家好。我对iPhone的开发还很陌生,在弄清楚如何更改导航栏标题时遇到了一些麻烦。关于本网站上的另一个问题,有人建议使用: viewController.title = @"title text"; 但这对我不起作用...我需要添加UINavigationController来完成此操作吗?或者只是我的UIViewController子类的插座?如果有帮助,我在IB中定义了导航栏,并尝试在UIViewController子类中设置其标题。这是让我头疼的简单事情之一。放置self.title = @“标题文字”; 在viewDidLoad,initWithNibName也没有工作。任何人都知道发生了什么事以及如何正确地进行它? 谢谢!



8
如何处理临时NSManagedObject实例?
我需要创建NSManagedObject实例,对其进行处理,然后将其丢弃或存储到sqlite db。问题是,我无法创建NSManagedObject未连接到的实例,NSManagedObjectContext这意味着在我决定不需要数据库中的某些对象之后,必须以某种方式进行清理。 为了解决这个问题,我使用相同的协调器创建了一个内存中的存储,并通过使用assignObject:toPersistentStore.Now来将临时对象放置在其中,如何确保这些临时对象不会到达数据,该数据是我从两家商店的共同点是什么?还是我必须为此任务创建单独的上下文? UPD: 现在,我正在考虑为内存存储创建单独的上下文。如何将对象从一个上下文移动到另一个上下文?仅使用[context insertObject:]?在这种设置下可以正常工作吗?如果我从对象图中插入一个对象,那么整个图是否也会插入到上下文中?



2
仪器ObjectAlloc:实时字节和总字节的说明
我正在使用Instument的ObjectAlloc工具来了解我的应用程序(iPhone)正在做什么以及何时何地在做什么。 我真的希望对这些统计数据有一个基本的解释: 实时字节 #活的 #暂时的 总字节数 当我尝试确定应用程序正在使用多少内存时,我应该查看活动字节还是总字节?这包括内存泄漏吗?什么是暂态对象? 谢谢

4
使用常量NSString作为NSUserDefaults的键
我正在使用NSUSerDefaults存储用户首选项。我记得在某处读过,将键设置为常量是一个好主意-我同意。以下代码是我目前拥有的: [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:polygon.numberOfSides] forKey:@"polygonNumberOfSides"]; 我尝试将其更改为: @implementation Controller NSString const *kPolygonNumberOfSides = @"polygonNumberOfSides"; -(void)savePolygonInfo { [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:polygon.numberOfSides] forKey:kPolygonNumberOfSides]; } 在执行此操作时,它会产生“ warning: passing argument 1 of 'objectForKey:' discards qualifiers from pointer target type”。我渴望使我的代码不受编译器警告的影响。如何解决此警告?





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.