问题标签 [initwithcoder]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3224 浏览

objective-c - 使用 NSCoder 将自定义对象保存到 plist

所以,我意识到我需要使用 NSCoding 将我的自定义对象保存到 plist。

initWithCoder我正在苦苦挣扎的部分正是在我实现了andencodeWithCoder方法之后我是如何做到这一点的。他们分别返回idvoid,所以如果他们已经将我的对象转换为 NSData 或他们对他们做的任何事情,数据在哪里,所以我可以保存它?

我有这样设置的方法:

试图弄清楚下一步是将这些对象(已经在 NSMutableArray 中)保存到 .plist 中,并在重新打开应用程序时调用。

任何帮助表示赞赏!

0 投票
2 回答
12411 浏览

ios - 使用 IB 从 View Controller 的视图中加载带有 XIB 的自定义 UIView

我有一个使用 Interface Builder 构建的自定义UIView( )。MyCustomUIView我想把这个自定义视图放在MyViewController的视图中,它也是使用 IB 设计的。我在XIB 中放置了UIView一个子视图,MyViewController并将它的类设置为MyCustomUIView. 问题是,当我运行代码时,只出现一个空白视图。(当我在代码中实例化MyCustomUIView时,它显示得很好。)

我只是initWithFrame:通过以下方式覆盖该方法MyCustomUIView.m

我应该怎么做才能使视图正确加载?应该怎么initWithCoder:看?

0 投票
1 回答
179 浏览

xcode - 添加 messageUI.framework 后应用停止工作

添加 messageUI.framework 后应用停止工作

我创建了一个可以正常工作的应用程序,我想添加一些新功能。我添加了messageUI.framework它并停止工作。如果我删除框架,它会再次起作用,但这不是想法。

我收到的错误是:

-[Account initWithCoder:]: unrecognized selector sent to instance 0x1cd953a0

我有一个NSObject名为 Account 的自定义,加载时出现错误:

以前保存时:

它可能是由一些重叠的变量或类似的东西引起的吗?

笔记:

Account.h就好像:

并且Account.m是:

0 投票
1 回答
354 浏览

iphone - 使用情节提要时设置完成的 TabBar 图像?

我正在开发一个应用程序,其中大部分 UI 是通过 Xcode 中的 Storyboard 设置的。我想做的一件事是为 TabBar 上的 UITabBarItems 指定“完成”图像,而不是您可以通过 Interface Builder 访问的默认“Stencilled”图像。

我的问题是在哪里执行此操作的最佳位置,我目前正在 awakeFromNib 中执行此操作,因为当从情节提要中取消归档内容时需要执行此操作,但我不确定是否应该使用 initWithCoder: 代替,这是最好的有关系吗?

或者

我知道initWithCoder:当出口和动作尚未连接时,在从笔尖(包含在故事板中)取消归档对象开始时调用。我也知道awakeFromNib在取消归档过程结束时会调用它,并表示 viewController 现在可以使用了。我的感觉是,这实际上取决于您想做什么,尽管使用awakeFromNib可能会证明问题较小,因为您不会遇到尚未连接出口和操作的问题。

编辑:

让我换个说法,你会在什么情况下使用initWithCoder:awakeFromNib反之亦然?

0 投票
1 回答
1203 浏览

xcode - 在 UIView 中显式调用 initWithCoder 或 ViewDidAppear 等效项?

在 UIView 中,我在顶级视图控制器中有一个带有 IBAction 和方法的导航按钮。

在 IBAction 代码中,我翻转了一个布尔值,以便当执行返回 UIView 时,在 drawRect 之前有一些新设置:重新绘制视图。

如果所有这些都在 ViewController 中,我可以将新的设置代码放在 ViewDidAppear 之类的东西中,这样每次按下按钮时它都会执行。但是,在 UIView 级别没有这样的方法。有 initWithCoder,但这似乎只执行一次(当故事板/笔尖加载时)。

所以我的问题是 - 要么,有没有办法在 VC 级别从我的 IBAction 显式调用 initiWithCoder 方法(我已经尝试过 [self initWithCoder:nil] 但 UIView 级别的断点没有触发)或者有当执行返回到 UIView 级别时运行的方法,例如 ViewDidAppear?

谢谢

目标图片: 在此处输入图像描述

0 投票
1 回答
1806 浏览

uiscrollview - initWithCoder 为 frame 属性返回 0 值

我对 uiscrollview 进行了分类,并使用 initWithCoder 为我的 uiscrollview 准备了所有子视图。我使用下面的代码来设置它:

但这一直失败,因为 self.frame 属性总是返回 0 值。使用self.frame属性对我来说非常重要,因为我想使用情节提要对滚动视图的框架进行任何高度调整。

我使用 xib 文件而不是使用情节提要尝试了同样的事情,它工作正常。但在我的项目中,我不想使用 xib 文件。

如果有人能解释我为什么在使用情节提要时在 initWithCoder: 方法中得到 0 值,那就太好了?如果使用情节提要如何实现这一目标?

PS:我注意到layoutSubviews方法返回正确的帧信息,但我无法在这里创建我的子视图,因为每次帧更改都会调用它(当我滚动时)

0 投票
1 回答
157 浏览

objective-c - 如何在不被 initWithFrame: 覆盖的实例变量的情况下保存 NSView?

这里是可可新手。我试图在 NSView 中对实例变量进行编码以保存到文件中。但是,每当我对其进行编码时,它都会在调用 initWithFrame: 时被覆盖为 (null)。有没有办法可以跳过这种行为并将实例变量加载到未归档的 NSView 上?这是我的代码:

在上面的代码中,我首先将要填充的颜色设置为绿色,然后在 drawRect: 方法完成后将其更改为黄色,因此保存的颜色为黄色。但尽管如此,它在 initWithFrame: 日志注释中恢复为空,并且我再次获得绿屏。从外观上看,唯一的方法似乎是将数据与视图分离。但如果有更简单的方法,任何人都可以帮助我吗?

0 投票
1 回答
809 浏览

ios - 非标准 Storyboard 视图控制器初始化(不是 -initWithCoder :)

-initWithCoder:除了Storyboard 视图控制器,还有其他方法可以使用 init 方法吗?我已经知道你可以在里面的 VC 上设置属性-prepareForSegue:

0 投票
2 回答
911 浏览

ios - 在 initWithCoder 中设置 UIImageView 框架

我正在尝试在 UICollectionCell 的子类中设置 UIImageView 的帧大小,但它不起作用。我使用故事板。

在代码中,除了关于 imageView 的最后一行之外,一切正常。如果我将代码放在 drawRect 中,它可以正常工作。

0 投票
1 回答
472 浏览

ios - 通过 IB 将属性设置为自定义子视图初始化(用于 uitableviewcell 模板)

我想创建一个 uitableview 混合不同类型的项目来显示。对于每个项目,我想显示一些通用信息(始终相同的类型和样式)和一些细节(根据项目类型不同的类型和样式)。= 我需要某种“模板管理器”。

我使用 coredata(Item 是一个实体)存储和检索项目,通过 nsfetchedresultscontroller 将数据挂钩到 tableview,项目类型存储为名为 item_nature 的属性。

我正在使用故事板,所以首先我考虑使用不同的原型单元格,并在 cellForRowAtIndexPath 中,根据 item_nature 值分配所需的单元格原型。几乎可以工作,但由于我将拥有大约 10 种不同的项目,因此在故事板中管理 10 个原型单元并不是很实用。另外,我需要根据内容类型/长度调整行高,这种方法意味着很多冗余代码......

现在我尝试第二种方法,但无法使其工作。我的想法:

1> 在情节提要中,我只为每个项目类型创建一个原型单元。见下图,这个单元格由一张图像和两个标签(蓝色)+一个视图(红色)组成

在此处输入图像描述

蓝色区域将用于“通用信息”(相同的类型、大小和样式,无论项目,只有内容更改),红色区域就像一个容器,我通过根据 item_nature 添加特定子视图来调整特定模板

2> 在单元格自定义类中,我为三个标签和视图设置 IBOutlets,并将这些出口与情节提要中的 UIelements 链接

MainTLCustomCell.h

3> 我为每个项目模板创建一个专用的xib文件,例如BasicArticleItemTemplate.xib,ArticleWithPicItemTemplate.xib等这些xib应该根据项目的item_nature加载到视图容器中(单元格中仍然是红色)

4> 我创建了一个名为 CellTemplateContainer 的 UIView 子类,其属性为“templateType”,并将该类分配给原型单元格中的“容器”视图。由于这个视图是由情节提要实例化的,在 -initWithCoder 中(我也在 -awakeFromNib 中尝试过),我根据 templateType 属性的值(我将尝试从 tableViewController 发送的值)设置一个条件来添加子视图

单元格模板容器.h

单元格模板容器.m

5> 在 tableViewClass 中,在 -cellForRowAtIndexPath 中,我设置了三个泛型标签的值,并尝试为视图容器的属性“templateType”设置值:

只要我不对 templateType 值设置条件,在 -initWithCoder 中添加子视图就可以很好地工作。

我的问题在这里:

itemTemplate 视图永远不会得到这个值(总是 0,所以我假设为 nil)。我仍然对对象与实例感到困惑,并且显然不掌握调用 init 方法的顺序。但我认为我可以在容器视图初始化之前或期间将值“发送”到容器视图以考虑...我也希望通过这种方法我可以轻松地添加一个新的 item_nature 和关联的模板模型 + 具有更简单的方法来管理有关单元格高度计算的代码。

所以,两个问题: - 我做错了什么?- 在此类项目中,您推荐什么作为处理单元模板管理的好方法?

谢谢