通常情况下,我讨厌去比编程语言更加经验丰富的人,并尝试将其排除在外,但是我已经在这个问题上扯了很长时间。它是最受欢迎的
由于未捕获的异常终止应用' 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]));
}
}
答案 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;
}