2
[__NSArrayM relatedObjectDidChange]: unrecognized selector sent to instance

error Class: NSInvalidArgumentException

崩溃报告堆栈跟踪:

0 CoreFoundation 0x33d153e7 <redacted> + 162
1 libobjc.A.dylib 0x3ba06963 objc_exception_throw + 30
2 CoreFoundation 0x33d18f31 <redacted> + 0
3 CoreFoundation 0x33d1764d <redacted> + 392
4 CoreFoundation 0x33c6f208 _CF_forwarding_prep_0 + 24
5 EventKit 0x3440af03 <redacted> + 30
6 EventKit 0x34410225 <redacted> + 396
7 EventKit 0x34410095 <redacted> + 28
8 EventKit 0x3440d3fd <redacted> + 396
9 Calendar 0x000f10a5 -[createNewEventView editEvent:] + 1696
10 UIKit 0x35c0f087 <redacted> + 70
11 UIKit 0x35c0f111 <redacted> + 120
12 UIKit 0x35c0f087 <redacted> + 70
13 UIKit 0x35c0f03b <redacted> + 30
14 UIKit 0x35c0f015 <redacted> + 44
15 UIKit 0x35c0e8cb <redacted> + 502
16 UIKit 0x35c0edb9 <redacted> + 488
17 UIKit 0x35b375f9 <redacted> + 524
18 UIKit 0x35b248e1 <redacted> + 380
19 UIKit 0x35b241ef <redacted> + 6198
20 GraphicsServices 0x3783b5f7 <redacted> + 590
21 GraphicsServices 0x3783b227 <redacted> + 34
22 CoreFoundation 0x33cea3e7 <redacted> + 34
23 CoreFoundation 0x33cea38b <redacted> + 138
24 CoreFoundation 0x33ce920f <redacted> + 1382
25 CoreFoundation 0x33c5c23d CFRunLoopRunSpecific + 356
26 CoreFoundation 0x33c5c0c9 CFRunLoopRunInMode + 104
27 GraphicsServices 0x3783a33b GSEventRunModal + 74
28 UIKit 0x35b782b9 UIApplicationMain + 1120
29 Calendar 0x000a9bbf main + 66
30 Calendar 0x0003a600 start + 40

这种错误是什么意思,这种错误的可能性是什么?

我对editEvent方法的实现:

-(void) editEvent:(EKSpan )span
{    
    EKEvent * newEditingEvent = self.EventToEdit;
    CalendarAppDataObject* theDataObject = [self theAppDataObject];
    if(eventCalendar != nil && theDataObject.selectedCalendarsForDisplayData != nil){

        NSArray *arrayDataUnarchiver =(NSArray *) [NSKeyedUnarchiver unarchiveObjectWithData:theDataObject.selectedCalendarsForDisplayData];
        NSMutableSet * uniqueId = [[NSMutableSet alloc ] initWithArray:arrayDataUnarchiver];
        [uniqueId addObject:eventCalendar.calendarIdentifier];

        NSArray * selectedCal = [uniqueId allObjects];

        NSData *arrayDataArchiver = [NSKeyedArchiver archivedDataWithRootObject:selectedCal];
        theDataObject.selectedCalendarsForDisplayData = arrayDataArchiver;
        //save selected to database

        NSError *error;
        self.managedObjectContext =  theDataObject.managedObjectContext;
        NSManagedObjectContext *context = [self managedObjectContext];
        // **** log objects currently in database ****
        // create fetch object, this objects fetch's the objects out of the database
        NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
        NSEntityDescription *entity = [NSEntityDescription entityForName:@"Settings" inManagedObjectContext:context];
        [fetchRequest setEntity:entity];


        NSArray *fetchedObjects= [context executeFetchRequest:fetchRequest error:&error] ;
        for (NSManagedObject *info in fetchedObjects)
        {
            [info setValue:arrayDataArchiver forKey:@"selectedCalendarsForDisplayData"] ;
        }

        //this is for comitting changes to core data
        [context save:&error];
        [fetchRequest release];
        [uniqueId release];
    }


    NSString * eventNotesString = @"";
    if(self.eventNotes != nil)
    {
        eventNotesString = self.eventNotes;
    }
    newEditingEvent.notes = [EventsDataUtil generateEventsNoteForSavingColor:eventNotesString colorToSave:self.eventBackColor];


    if(self.eventRecurrenceRule != nil)
    {
        NSArray * RecRulesArray = [[[NSArray alloc ] initWithObjects:self.eventRecurrenceRule, nil]autorelease];

        if(theDataObject.isRepeatChanged)
        {
            [newEditingEvent setRecurrenceRules:RecRulesArray];
        }

    }else
    {
        [newEditingEvent setRecurrenceRules:nil];
    }

    if([[ self.eventTitle stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] isEqualToString:@""])
    {
        self.eventTitle = @"New Event";

    }
    newEditingEvent.title = self.eventTitle;
    if(isLocationPhoneNumber)
    {
        NSString * PhoneLocationString = @"tel:";
        PhoneLocationString = [PhoneLocationString stringByAppendingFormat:@"%@", [self.contactPhoneNumber stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]];
        newEditingEvent.location = PhoneLocationString;
    }
    else
    {
        newEditingEvent.location = self.eventLocation;
    }


    newEditingEvent.startDate = self.eventStartDate;
    newEditingEvent.endDate =self.eventEndDate;
    newEditingEvent.allDay = self.eventAllDay;
    newEditingEvent.calendar = self.eventCalendar;
    newEditingEvent.URL = self.eventURL;
    // repeat and alert
    NSArray * Alarms = nil;
    if(self.eventAlert !=nil)
    {
        if(self.eventSecondAlert !=nil)
        {
            Alarms = [[[NSArray alloc] initWithObjects:self.eventAlert,self.eventSecondAlert, nil]autorelease];
        }
        else {
            Alarms = [[[NSArray alloc] initWithObjects:self.eventAlert, nil]autorelease];
        }

    }

    newEditingEvent.alarms = Alarms;


    NSError *err;
    [newEditingEvent setCalendar:self.eventCalendar];
    [sharedEventStore saveEvent:newEditingEvent span:span commit:YES error:&err];
    theDataObject.needUpdate = YES;
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    {
        [[NSNotificationCenter defaultCenter] postNotificationName:@"dismissEventDetails" object:nil];
    }
    else{

        [self dismissViewControllerAnimated:YES completion:NULL];
    }


}
4

2 回答 2

0

错误报告告诉你你需要知道的一切:

[__NSArrayM relatedObjectDidChange]: unrecognized selector sent to instance

这意味着NSArray该类没有调用方法relatedObjectDidChange,因此您的代码显然在某处调用了它:

[someArray relatedObjectDidChange];

如果没有看到您的代码,我无法提供更多帮助。我想看看这个方法:

[createNewEventView editEvent:] 

以及该类的定义

于 2013-02-19T10:18:28.843 回答
0

该方法relatedObjectDidChange被发送到NSArray该类不响应的类对象。你把一个NSMutableArray和一个NSArray地方混在一起了吗?

还是relatedObjectDidChange您自己在其中一个对象上实现的方法?在这种情况下,您可能会将 an 分配NSArray给您希望属于您自己的类的变量。

于 2013-02-19T10:20:38.260 回答