2011-04-16 45 views
0

我希望这是一个简单的问题,因为我对可可非常陌生。我创建了一个具有UIImageView作为属性的对象。我在另一个程序中设置了该属性,例如在可可中设置参考类型

Bleep* bleep = [[Bleep alloc]init]; 
bleep.heading = heading; 
bleep.distance = distance; 
bleep.instanceId = instanceId; 
... 
bleep.imgView = [[UIImageView alloc] initWithFrame:CGRectMake(x, y, bleepImg.size.width, bleepImg.size.height)]; 

没有错误,但imgView是零(0x0)。什么行为会导致这种情况?我正在创建bleep对象,设置值类型很好,但是这个对象似乎不想保存任何东西。

我的课:

@interface Bleep : NSObject { 

} 
@property float x; 
@property float y; 
@property float distance; 
@property int instanceId; 
@property UIImageView* imgView; 
@property float heading; 

@end 

@implementation Bleep 
@synthesize x; 
@synthesize y; 
@synthesize distance; 
@synthesize instanceId; 
@synthesize heading; 
@synthesize imgView; 

@end 
+0

这将有助于发布你的'@interface'和你的'setImgView:'或'@ synthesize'的相关部分。 – Anomie 2011-04-16 03:57:41

回答

0

你没有足够的展示代码在这里,但我的猜测是,你没有做好这方面的属性。您是否声明它:例如:

@property (nonatomic, retain) UIImageView *imgView; 

然后,你是综合它还是让你设置/得到你自己?如果你做了后者,你可能犯了一个错误,即在你的制定者中通过自我引用它。

如果这不是其中之一,则显示更多代码。

...

这里是你的代码应该是什么样子:

@interface Bleep : NSObject { 
    UIImageView *imgview; 
} 
@property(nonatomic, retain) UIImageView* imgView; 

@implementation Bleep 
@synthesize imgView; 

@end 

类中的指针被通过属性暴露出来。这看起来有些重复,但在Xcode 4中,多次输入这些东西的痛苦已经消失了。

+1

请注意,声明属性的默认设置语义是'assign',所以如果您没有指定任何se​​tter语义属性(或指定'assign'),那么该类负责管理声明属性的内存。 – 2011-04-16 04:08:41

+0

实际上,不再需要声明一个实例变量。如果没有声明,Objective-C 2.0会自动创建一个支持实例变量。 – 2011-04-16 04:09:42

+0

@Bavarious:好奇的是,苹果的代码仍然充满了他们。我在过去的一年半中下载了无数的例子。 – Rob 2011-04-16 04:31:15