0

我正在使用 MagicalRecord (MR) 删除属于选定客户的所有记录(我成功删除了客户记录,然后继续查找该客户的约会记录)。这样做,我得到了错误。

     [_PFArray MR_deleteInContext:]: unrecognized selector sent to instance

这是代码以及相关定义:

                    //  set up predicate using selectedClientKey
                NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread];
                NSPredicate *predicate = [NSPredicate predicateWithFormat:@"aClientKey == %@", selectedClientKey];
                ClientInfo *clientSelected = [ClientInfo MR_findFirstWithPredicate:predicate inContext:localContext];

                if(clientSelected)  {
                    [clientSelected MR_deleteInContext:localContext];
                    [localContext MR_saveToPersistentStoreAndWait];
                }

                //  delete clients appointments...
                predicate = [NSPredicate predicateWithFormat:@"aApptKey == %@", selectedClientKey];  //  use client key
                AppointmentInfo *apptSelected = [AppointmentInfo MR_findAllWithPredicate:predicate inContext:localContext];

                if(apptSelected)  {
                    [apptSelected MR_deleteInContext:localContext];
                    [localContext MR_saveToPersistentStoreAndWait];
                }

这是 AppointmentInfo 的定义:

@interface AppointmentInfo : NSManagedObject

@property (nonatomic, retain) NSString * aApptKey;
@property (nonatomic, retain) NSDate * aEndTime;
@property (nonatomic, retain) NSString * aServiceTech;
@property (nonatomic, retain) NSDate * aStartTime;

findAllWithPredicate语句中,我收到以下编译器警告:

CalendarViewController.m:80:43:从 'NSArray *__strong' 分配给 'NSMutableArray *' 的不兼容指针类型

我知道findAllWithPredicate语句将返回一个 NSArray;但是我已经看到了使用 NSManagedObject 的示例,这就是 AppointmentInfo 的含义。 第 3 行中的ClientInfo也是一个 NSManagedObject 并且它没有编译器警告。我认为这可能是因为从find 语句返回的只有一 (1) 条记录,但没有区别,一条记录或多条记录。

由于编译器警告,我收到运行错误,还是有其他问题?(我查看了 Google 和 SO,并没有发现任何可以解决此特定问题的内容)。

4

2 回答 2

0

你是正确的findAllWithPredicate:将返回一个数组。您看到的示例很可能使用findFirstWithPredicate:或类似样式的方法。Find First,顾名思义,会在请求返回的结果中返回第一个对象。这很可能也是您想要的。

于 2013-03-11T08:58:25.827 回答
0

我想通了......对于那些可能有同样问题的人, MR_findAll 返回一个 NSArray ,你必须“遍历”并单独删除每个。这是上面的更正代码:

    //  delete clients appointments...
predicate = [NSPredicate predicateWithFormat:@"aApptKey == %@", selectedClientKey];  //  use client key
NSArray *apptDataArray = [AppointmentInfo MR_findAllWithPredicate:predicate inContext:localContext];

for(int i = 0; i < apptDataArray.count; i++)  {
    AppointmentInfo *ai = [apptDataArray objectAtIndex: i];
    [ai MR_deleteEntity];
}
[localContext MR_saveToPersistentStoreAndWait];
于 2013-03-11T15:58:03.567 回答