0

这是我将一些参数传递给方法,然后将参数值分配给本地 ivars 和属性的情况:

- (void) assignOwnerView:(UIView*)oView andPosition:(menuPosition)position withTopView:(UIView*)topView {


    self.topView = topView;
    self.ownerView = oView;
    self.position = position;

    << --- other code --- >>
}

这些属性的接口是这样的(用综合更新)

@interface MenuVC (){
    UIView *ownerView_;
    UIView *topView_;
    menuPosition position_;
}

@property (nonatomic, retain) UIView *ownerView;
@property (nonatomic, retain) UIView *topView;
@property (assign) menuPosition position;

@end


@implementation MenuVC
@synthesize list, menuDelegate;
@synthesize ownerView = ownerView_;
@synthesize topView = topView_;
@synthesize position = position_;

- (id)initWithFrame:(CGRect)frame style:(UITableViewStyle)style
{...

枚举在这里定义:

typedef enum {
    above,
    below,
    centered
} menuPosition;

执行完这三个赋值后,在调试器的断点处,值如下图:

在此处输入图像描述

接收到的参数值看起来没问题,但 ivars 的分配值ownerView_position_不正确。另一方面,topView没关系。

当我直接分配给 ivars 而不是属性时,同样的事情发生了。

当我升级到 Lion (10.7.3) 和 XCode 4.3.1 时,我开始看到这个问题。在那之前它工作正常。我在我的应用程序的其他位置看到了这一点,但我还没有看到任何模式。

没有使用 ARC。

我之前报告过这个问题,但没有得到答案。在这种情况下,问题描述更简单。这可能更容易看出问题所在。

更新——添加了头文件

#import <UIKit/UIKit.h>
@class MenuVC;

@protocol menuDelegateProtocol 

typedef enum {
    above,
    below,
    centered
} menuPosition;


- (void) didSelectItemFromMenu:(MenuVC *)menu atIndex:(NSUInteger) index;

@end

@interface MenuVC : UITableViewController {

    NSArray *list;

    float extendedHeight;

    id<menuDelegateProtocol> menuDelegate;

}

@property (nonatomic, retain) NSArray *list;
@property (nonatomic, assign) id<menuDelegateProtocol> menuDelegate;

- (id) initWithFrame:(CGRect)frame style:(UITableViewStyle)style;
- (void) hide;
- (void) unhide;
- (void) assignOwnerView:(UIView*)oView andPosition:(menuPosition)position withTopView:(UIView*)topView;

@end
4

2 回答 2

0

你没有合成属性。

放:

@synthetize ownerView = ownerView_;
@synthetize topView = topView_;
@synthetize position = position_;

在“@implementation MenuVC”之后。

于 2012-04-16T19:28:22.940 回答
0

我将调试器从 LLDB 更改为 GDB。这似乎是 LLDB 的问题。我现在没有看到这个。

于 2012-04-17T05:44:27.733 回答