测试UIViews的平等性,需要澄清

时间:2011-11-05 14:54:38

标签: objective-c ios

我无法在我的项目中设置的视图上测试相等性。

这是一篇很长的帖子,请耐心等待。我有3个单独的视图设置为同一个XIB的一部分。

enter image description here

每个视图都通过IBOutlet连接到文件所有者(UIViewController) enter image description here enter image description here enter image description here

所有者本身是一个UIViewController

@interface PuzzleViewController : UIViewController {

FileOwner视图内部声明为:

IBOutlet Puzzle1 *p1;
IBOutlet Puzzle2 *p2;
IBOutlet Puzzle3 *p3;

@property (nonatomic, retain) IBOutlet Puzzle1 *p1;
@property (nonatomic, retain) IBOutlet Puzzle2 *p2;
@property (nonatomic, retain) IBOutlet Puzzle3 *p3;

另外我有

UIView *currentPuzzleView;
@property (nonatomic, retain) UIView *currentPuzzleView;

在.m文件中,初始化时,我将当前视图声明为p1

[self setCurrentPuzzleView:p1];

稍后,我想检查当前视图是否实际上是p1。这种比较失败了。

if ([[self currentPuzzleView]  isEqual:p1]) {

另外这也失败了

if ([self currentPuzzleView]  == p1) {

为什么会这样?

2 个答案:

答案 0 :(得分:2)

因为您使用不同的类进行相等性测试(UIView和Puzzle1)。你的currentPuzzleView应该是指向Puzzle1 Puzzle2 Puzzle3这三个类之一的指针。如果你肯定需要为这些拼图视图使用三个不同的类,请尝试向它们添加标签并更改

@property (nonatomic, retain) UIView *currentPuzzleView;

int currentPuzzleViewTag;

viewDidLoad:时将其设置为1,并在选择不同的视图时将标记更改为适当的。

答案 1 :(得分:1)

这只是一种预感,但初始化时p1可能是nil'。这实际取决于您将currentPuzzleView设置为p1的位置。可能是出口指向什么(尚未)。