未捕获异常'NSInvalidArgumentException'的问题,原因:'*** - [__ NSArrayM insertObject:atIndex:]:对象不能为零

时间:2013-08-06 05:54:53

标签: ios objective-c exception

通常情况下,我讨厌去比编程语言更加经验丰富的人,并尝试将其排除在外,但是我已经在这个问题上扯了很长时间。它是最受欢迎的

  

由于未捕获的异常终止应用' NSInvalidArgumentException',原因:' * -   [__NSArrayMutable .. insertObject:atIndex:]:object不能为nil

我对Xcode / Obj-C很新,所以我的理解是有限的。从本质上讲,我一直试图修改Apple的第二个iOS应用程序'更好地了解一切如何协同工作。该应用程序基本上是他们的#34; BirdSighting"的修改版本。应用程序。我检查了这个很棒的网站,特别是找不到我的答案的简明答案。

无论如何,我已经添加了异常断点,它正在抛出一行:

  

[self.masterNewEventList addObject:event];

走向最底层。

NewEventDataController.m

#import "NewEventDataController.h"
#import "NewEvent.h"

@interface NewEventDataController ()

- (void)initializeDefaultDataList;

@end

@implementation NewEventDataController

- (void)initializeDefaultDataList
{
    NSMutableArray *eventList = [[NSMutableArray alloc] init];

    self.masterNewEventList = eventList;

    NewEvent *event;

    NSDate *today = [NSDate date];

    event = [[NewEvent alloc] initWithName:@"Event" date:today];

    [self addNewEventWithEvent:event];
}

- (void)setMasterNewEventList:(NSMutableArray *)newList
{
    if (_masterNewEventList != newList)
        _masterNewEventList = [newList mutableCopy];
}

- (id)init
{
    if (self = [super init])
    {
        [self initializeDefaultDataList];

        return self;
    }

    return nil;
}

- (NSUInteger)countOfList
{
    return [self.masterNewEventList count];
}

- (NewEvent *)objectInListAtIndex:(NSUInteger)theIndex
{
    return [self.masterNewEventList objectAtIndex:theIndex];
}

- (void)addNewEventWithEvent:(NewEvent *)event
{
    [self.masterNewEventList addObject:event];
}

@end

我的NewEvent.m如下:

#import "NewEvent.h"

@implementation NewEvent

-(id)initWithName:(NSString *)event date:(NSDate *)date
{
    self = [super init];

    if (self)
    {
        _event = event;

        _date = date;

        return self;

    }

    return nil;
}

@end

我的想法是,当它尝试添加初始事件时(在投掷之前),事件本身未正确初始化。调试读取:

event = (NewEvent *) 0x00000000

先谢谢你一起来看看。

main.m 

#import <UIKit/UIKit.h>

#import "ParentAppDelegate.h"

int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([ParentAppDelegate class]));
    }
}

2 个答案:

答案 0 :(得分:0)

在你的NewEvent类的initWithName:date方法中,你需要在if块中返回self。在您的情况下,在此方法运行后,您总是返回nil。

像这样:

-(id)initWithName:(NSString *)event date:(NSDate *)date
{
    self = [super init];

    if (self)
    {
        _event = event;

        _date = date;        
        //don't forget this line
        return self;
     }
     return nil;
}

答案 1 :(得分:0)

问题在于你的init方法。你应该回归自己。

 - (id)initWithName:(NSString *)event date:(NSDate *)date
    {
    self = [super init];

    if (self)
    {
        _event = event;
        _date = date; 
        return self;
    }

    return nil;
}
相关问题