我有,我希望能够来初始化一个自定义视图in-code和nib.
写两种方法initWithFrame和initWithCoder方法的正确方法是什么?它们共享一块用于初始化的代码块.
我有一个子类UITableViewCell.我的子类包含几个UILabels.我希望我的子类将这些标签初始化为适用于我的每个表视图单元的某些默认设置.
我读到我应该用initWithCoder它.我的initWithCoder函数正在被调用,我可以逐步浏览我的函数中的每一行,它似乎经历了这些动作.当我运行我的应用程序时,我没有看到任何属性被应用.最值得注意的是,字体没有被更改.我只是不认为我正在修改的任何属性UILabel实际上是被保存或显示的.
我正在使用这个子类与a Storyboard.我知道我的更改不会反映在Storyboard,但是在应用程序运行时它们也没有反映出来 - 尽管我的代码正在执行.
编辑:我想提一下,在尝试覆盖之前initWithCoder,我在这些子类中有一个实例方法,我将运行此逻辑.我只是在其中调用该实例方法cellForRowAtIndexPath.这个方法很有效,但我认为在这个子类中自动生成这个逻辑会很方便.
有任何想法吗?我的代码如下:
#import "ThreadListCell.h"
@implementation ThreadListCell
- (id)initWithCoder:(NSCoder *)aDecoder {
if ((self = [super initWithCoder:aDecoder])) {
// adjust the font settings of the title
self.title.font = [UIFont fontWithName:@"SourceSansPro-Black" size:16];
self.title.textColor = [UIColor colorWithWhite:0.267f alpha:1.0f];
// adjust the font settings of the subtitle
self.text.font = [UIFont fontWithName:@"SourceSansPro-Light" size:14];
self.text.textColor = [UIColor colorWithWhite:0.267f alpha:0.9f];
self.text.textColor = [UIColor colorWithRed:1 green:0 …Run Code Online (Sandbox Code Playgroud) 正如我在上述主题中提出的问题所述,为了说"好的,我需要encodeWithCoder:并initWithCoder:为此实例化",您通常需要满足哪些要求?通常你可以写对象状态NSUserDefaults,所以我很好奇你的专家什么时候决定使用一个与另一个?
我有一个使用Interface Builder构建的custom UIView(MyCustomUIView).我想将这个自定义视图放在MyViewController视图中,该视图也是使用IB设计的.我在一个XIB中放置了UIView一个子视图MyViewController并将其设置为MyCustomUIView.问题是,当我运行代码时,只显示一个空白视图.(当我MyCustomUIView在代码中实例化时,它显示得很好.)
我只是initWithFrame:按以下方式覆盖该方法MyCustomUIView.m:
- (id)initWithFrame:(CGRect)frame
{
[[NSBundle mainBundle] loadNibNamed:@"MyCustomUIView" owner:self options:nil];
self = self.view;
return self;
}
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能使视图正确加载?应该initWithCoder:怎么样?
我正在开发一个应用程序,其中大部分UI是通过Xcode中的Storyboard设置的.我想要做的一件事是在TabBar上为UITabBarItem指定"完成"图像,而不是可以通过Interface Builder访问的默认"Stencilled"图像.
我的问题是哪里是最好的地方,我目前在awakeFromNib中这样做,因为它需要在故事板上取消归档时完成,但我不确定我是否应该使用initWithCoder:相反,哪个最好呢?这很重要吗?
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if(self) {
UIImage *tabIn = [UIImage imageNamed:@"TAB_IN"];
UIImage *tabOut = [UIImage imageNamed:@"TAB_OUT"];
UITabBarItem *tabBarItem = [self tabBarItem];
[tabBarItem setFinishedSelectedImage:tabOut withFinishedUnselectedImage:tabIn];
[tabBarItem setTitle:@"TWO"];
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
要么
- (void)awakeFromNib {
[super awakeFromNib];
UIImage *tabIn = [UIImage imageNamed:@"TAB_IN"];
UIImage *tabOut = [UIImage imageNamed:@"TAB_OUT"];
UITabBarItem *tabBarItem = [self tabBarItem];
[tabBarItem setFinishedSelectedImage:tabOut withFinishedUnselectedImage:tabIn];
[tabBarItem setTitle:@"TWO"];
}
Run Code Online (Sandbox Code Playgroud)
据我所知,initWithCoder:当出口和操作尚未连接时,在从nib(包含在故事板中)取消归档对象的开始时调用.我也理解awakeFromNib在unarchiving过程结束时调用它并发出viewController现在可以使用的信号.我的感觉是,它实际上只取决于你想做什么,虽然使用awakeFromNib可能证明问题较少,因为你不会遇到出口和行动还没有联系起来的问题.
让我改这个,你会用什么情况下initWithCoder:作为并列于awakeFromNib反之亦然?
我是swift adn中的新手,我在swift中遇到initwithcoder的问题.
我有类UserItem,我需要它来保存用户登录.
在目标c中是这样的
- (id)initWithCoder:(NSCoder *)decoder{
if (self = [super init]){
self.username = [decoder decodeObjectForKey:@"username"];
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
而且很快我就是这样想的
override init() {
super.init()
}
required init(coder decoder: NSCoder!) {
self.username = (decoder.decodeObjectForKey("username")?.stringValue)!
super.init(coder: decoder)
}
Run Code Online (Sandbox Code Playgroud)
但如果像上面那样,我得到代码错误
super.init(coder: decoder)
Run Code Online (Sandbox Code Playgroud)
错误消息是"额外参数'编码器'在通话中
我不知道了,所以我试试这个代码,
convenience init(decoder: NSCoder) {
self.init()
self.username = (decoder.decodeObjectForKey("username")?.stringValue)!
}
Run Code Online (Sandbox Code Playgroud)
但是,得到错误
.UserItem initWithCoder:]: unrecognized selector sent to instance 0x7fd4714ce010
Run Code Online (Sandbox Code Playgroud)
我该怎么办?谢谢你的帮助.
我正在为 iPhone 应用程序编写一些代码,但在正确加载默认数据时遇到问题。我的代码基于 Ray Wenderlich 所著的“学习 Cocos2d”书中的一些示例。
看来,即使我完全删除应用程序并尝试从新数据开始,应用程序也会不一致地不尝试加载数据,或者错误地认为存在数据并加载空值。
我使用 containsValueForKey 检查某个值是否存在,然后加载它或加载一些默认值,但即使在全新安装上, containsValueForKey 也会找到数据并且不会加载默认值。在 xcode 的管理器中,我检查了设备的文件结构和我指定保存的文档文件夹,看起来它不包含任何文件,所以我不确定它正在抓取什么。
我的猜测是问题与 initWithCoder 函数有关。有时它似乎神秘地经历了这个功能,但并非总是如此。另一个奇怪的事情是,[[GameManager sharedGameManager] save]当玩家获得高分时我调用(此处未显示,但代码与此 ObjectiveList 完全相同,只有一个 int)并且它似乎正确保存了它。
现在是代码:
GC数据库.h
#import <Foundation/Foundation.h>
id loadData(NSString * filename);
void saveData(id theData, NSString *filename);
Run Code Online (Sandbox Code Playgroud)
GC数据库.m
#import "GCDatabase.h"
NSString * pathForFile(NSString *filename) {
// 1
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
// 2
NSString *documentsDirectory = [paths objectAtIndex:0];
// 3
return [documentsDirectory stringByAppendingPathComponent:filename];
}
id loadData(NSString * filename) {
NSString *filePath = pathForFile(filename);
if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
NSData …Run Code Online (Sandbox Code Playgroud) 如果这个问题是微不足道的或无意义的,我提前道歉......这是我正在开发的第一个应用程序之一。(不幸的是)我不是开发人员。
我有一个 NSWindow,其中包含一个自定义 View,它是NSOpenGLView.
由于 和NSWindow是NSOpenGLView通过 Interface Builder 创建的,所以我既不需要init也不NSOpenGLContext需要NSOpenGLPixelFormat。
我最近切换到 OS X Lion,现在想利用新的 OpenGL 3.2。
从 Apple 文档中我发现要启用 OpenGL 3.2,我只需要编写如下内容:
NSOpenGLPixelFormatAttribute pixelFormatAttributes[] =
{
NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion3_2Core,
0
};
NSOpenGLPixelFormat *pixelFormat = [[[NSOpenGLPixelFormat alloc] initWithAttributes:pixelFormatAttributes] autorelease];
NSOpenGLContext* openGLContext = [[[NSOpenGLContext alloc] initWithFormat:pixelFormat shareContext:nil] autorelease];
Run Code Online (Sandbox Code Playgroud)
在初始化NSOpenGLContext.
这很容易(即使对我来说也是如此),但是我如何在我的应用程序中实现这一点,因为我从来没有这样做过init NSOpenGLContext?
由于是从 Interface Builder 创建的,因此不会调用NSOpenGLView该方法。-initWithFormat:shareContext:
因此我尝试-initWithCoder:用这样的方法重写该方法:
-(id)initWithCoder:(NSCoder *)aDecoder
{
NSOpenGLPixelFormatAttribute pixelFormatAttributes[] =
{
NSOpenGLPFAOpenGLProfile, …Run Code Online (Sandbox Code Playgroud) interface-builder nsopenglview opengl-3 osx-lion initwithcoder
所以看起来我应该设置我的成员变量viewDidLoad- 但我很困惑为什么设置这些变量initWithCoder失败,因为两者都在程序的开头被调用.
特别是我有一行代码:
[worldView setMapType:MKMapTypeSatellite];
Run Code Online (Sandbox Code Playgroud)
其中worldView是一个IBOutlet MKMapView对象.它工作viewDidLoad,但不是initWithCoder.
objective-c ×5
ios ×4
iphone ×3
cocoa-touch ×2
awakefromnib ×1
iboutlet ×1
nib ×1
nscoding ×1
nsopenglview ×1
opengl-3 ×1
osx-lion ×1
swift ×1
uistoryboard ×1
uiview ×1
xcode ×1
xib ×1