- [__ NSArrayM insertObject:atIndex:]:调用addChildBehavior时,object不能为nil:

时间:2015-01-28 12:35:11

标签: ios objective-c iphone ios7

我的方法中有3个行为,我很确定animationOptions是导致bug的行为。 AnimationOptions仅用于禁止轮换。如果我删除此行为,我的代码工作正常。

这是我的错误。由于未捕获的异常而终止应用

'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil’

添加异常断点后,断点保持在此行:

[self addChildBehavior:self.animationOptions];

如果我删除此行,我的代码就可以正常工作。

但是我怎么能修复这个错误,我找不到这行错误

这是我的DropitBehavior.m

#import "DropitBehavior.h"
@interface DropitBehavior()
@property(strong,nonatomic) UIGravityBehavior *gravity;
@property(strong,nonatomic) UICollisionBehavior *collider;
@property(strong,nonatomic) UIDynamicItemBehavior *animationOptions;
@end

@implementation DropitBehavior
-(UIGravityBehavior *)gravity
{
    if (!_gravity) {
        _gravity=[[UIGravityBehavior alloc]init];
        _gravity.magnitude=0.90;
    }
    return _gravity;
}

-(UICollisionBehavior *)collider
{
    if (!_collider) {
        _collider=[[UICollisionBehavior alloc]init];
        _collider.translatesReferenceBoundsIntoBoundary=YES;
    }
    return _collider;
}

-(UIDynamicItemBehavior *)animationOptions
{
    if (_animationOptions) {
        _animationOptions=[[UIDynamicItemBehavior alloc]init];
        _animationOptions.allowsRotation=NO;
    }
    return _animationOptions;
}

-(void)additem:(id <UIDynamicItem>)item
{
    [self.gravity addItem:item];
    [self.collider addItem:item];
    [self.animationOptions addItem:item];
}

-(void)removeitem:(id <UIDynamicItem>)item
{
    [self.gravity removeItem:item];
    [self.collider removeItem:item];
    [self.animationOptions removeItem:item];
}

-(instancetype)init
{
    self=[super init];
    [self addChildBehavior:self.gravity];
    [self addChildBehavior:self.collider];
    [self addChildBehavior:self.animationOptions];
    return self;
}
@end

1 个答案:

答案 0 :(得分:1)

NSMutable数组不接受&#34; nil&#34;被添加到自己

&#34; self.animationOptions&#34;将致电

 -(UIDynamicItemBehavior *)animationOptions

方法和方法只返回&#34; nil&#34;一直以来。

 -(UIDynamicItemBehavior *)animationOptions
 {
    if (_animationOptions) {
    _animationOptions=[[UIDynamicItemBehavior alloc]init];    

你在这段代码中的逻辑并不允许系统构建&#34; _animationOptions&#34;对象

    if (!_animationOptions)
{
..code..

}

会有所帮助