如何设置我的二传手?

时间:2012-07-09 00:21:19

标签: objective-c ios xcode setter

我正在尝试为我的arrayWithCurrentLadder属性进行延迟实例化,以便我的数组至少被分配和启动一次。但是,似乎我的setter实际上从未被调用过,因为当我尝试用数组中的对象做事时没有任何反应,所以我决定尝试NSLog数组中的一个对象来查明我是否得到了一个实际值(我按照那行代码放了星星,你可以看到),调试器说(null),所以我假设我的setter实际上并没有设置。我在我的setter中添加了随机NSLog以再次查看,但消息甚至没有显示在调试器中。为什么我的二传手不会被设定?

#import "LViewController.h"

@interface LViewController ()
    @property (nonatomic) BOOL firstLadder; 
    @property (nonatomic, weak) NSMutableArray *arrayWithCurrentLadder;
    @property (weak, nonatomic) IBOutlet UIView *playingView;//connects playingView to LViewController
@end

@implementation LViewController

    @synthesize playingView = _playingView;
    @synthesize firstLadder = _firstLadder;
    @synthesize arrayWithCurrentLadder = _arrayWithCurrentLadder;

    -(void)setArrayWithCurrentLadder:(NSMutableArray *)arrayWithCurrentLadder {
        if(!_arrayWithCurrentLadder)
            _arrayWithCurrentLadder = [NSMutableArray arrayWithCapacity:10];

        NSLog(@"kgjfkjg");

        _arrayWithCurrentLadder = arrayWithCurrentLadder;

        NSLog(@"dkfjdk");

    }

    - (IBAction)buildLadder:(UIButton *)sender {
        if (self.firstLadder) {

        *******************************************************************************************
            NSLog(@"%@", [[self.arrayWithCurrentLadder lastObject] frame].origin.x);
        *******************************************************************************************    

            if (sender.frame.origin.x == [[self.arrayWithCurrentLadder lastObject] frame].origin.x) {
                sender.backgroundColor = [UIColor redColor];
                [self.arrayWithCurrentLadder addObject:sender];
            }   
        }

    }

    - (IBAction)startingLadder:(UIButton *)sender {
        if (!self.firstLadder) {
            [self.arrayWithCurrentLadder addObject:sender];
        }

        sender.backgroundColor = [UIColor redColor];
        self.firstLadder = YES;
    }

@end

2 个答案:

答案 0 :(得分:1)

你应该覆盖getter而不是setter:

- (NSMutableArray *)arrayWithCurrentLadder
{
    if (nil == _arrayWithCurrentLadder) {
        _arrayWithCurrentLadder = [[NSMutableArray arrayWithCapacity:10] retain];
    }

    return _arrayWithCurrentLadder;
}

答案 1 :(得分:0)

您的setter可能设置得很好,但您的@property声明表示该对象未被保留。

假设ARC,weak @property的声明不符合您的要求;除非你有其他强烈引用该对象的东西,否则ARC运行时很乐意在退出该方法时释放它。

另请注意以下内容毫无意义; if()测试和赋值实际上是无操作(并且在手动保留释放下会出现泄漏)。

if (!foo) foo = [[... alloc] init];
foo = somethingElse;