我的方法中有3种行为,我很确定animationOptions是导致错误的一种。 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
最佳答案
NSMutable数组不接受要添加到自身的“ nil”
“ self.animationOptions”将调用
-(UIDynamicItemBehavior *)animationOptions
方法,并且该方法将始终仅返回“ nil”。
-(UIDynamicItemBehavior *)animationOptions
{
if (_animationOptions) {
_animationOptions=[[UIDynamicItemBehavior alloc]init];
您在这段代码中的逻辑不允许系统构造“ _animationOptions”对象。
if (!_animationOptions)
{
..code..
}
有助于