从delegate属性复制数组

时间:2012-03-14 08:21:53

标签: objective-c ios xcode

我对委托属性有一点问题。

属性“shifting”是一个NSMutableArray对象,由AppDelegate初始化和填充。

@interface isaavAppDelegate : UIResponder <UIApplicationDelegate> {
    NSMutableArray *shifts;
}
@property (nonatomic, retain) NSMutableArray *shifts;

在tableview控制器中,我尝试使用数组中的数据:

我宣布一个新的NSMutableArray changePersons:

NSMutableArray *changePersons;

然后在viewdidload方法中:

appDelegate = (isaavAppDelegate *)[[UIApplication sharedApplication] delegate];
changePersons = appDelegate.shifts;

所以我使用NSPredicate来过滤数组中的数据,但是当changePersons数组发生变化时,appDelegate.shifts也会发生变化,我不明白为什么......

我试图像这样复制数组:

changePersons = [appDelegate.shifts];

但是当我尝试使用NSPredicate应用过滤器时,应用程序崩溃并且我得到一个无效的选择器。

任何人都可以帮助我?

谢谢,Marco

3 个答案:

答案 0 :(得分:1)

尝试

changePersons =[NSMutableArray arrayWithArray:appDelegate.shifts];

答案 1 :(得分:0)

尝试

//in the tableviewcontroller.h

@property (nonatomic, retain) NSMutableArray* changePersons;

然后

//in the .m

self.changePersons = [((AppDelegate *)[[UIApplication sharedApplication] delegate] shifts];

此外,如果你打算如上所述使用app delegate,我建议你在.pch文件中使用#define,这样

//。pch文件

#import "AppDelegate.h"
#define UIAppDelegate ((AppDelegate *)[[UIApplication sharedApplication] delegate])

然后上面的赋值代码会有点整洁

self.changePersons = [UIAppDelegate shifts];

答案 2 :(得分:0)

尝试

changePersons = [appDelegate.shifts mutableCopy];

或@Krrish的回答