2014-02-28 214 views
0

我是iOS编程的初学者,我需要一些帮助从函数返回数组。 我有我的应用程序的这种结构(我不知道,如果它是正确的):从用户分配给NSArray *的指针类型不兼容*

https://www.dropbox.com/s/md4b2nrdf09wdny/Screenshot%202014-02-28%2018.11.30.png

User.h/.M是从CoreData模型生成的文件,并有4个属性。

LoginVC.h/.m用于登录到应用程序(授权)。

UserController的使用与用户结构工作 - 保存用户,更新用户,让所有用户等

我需要什么...我有功能UserController.m功能如下:

-(NSArray *)getUsers{ 

    CoreDataHelper *cdh = [(AppDelegate *)[[UIApplication sharedApplication]delegate] cdh]; 

    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"User"]; 

    NSArray *Users = [cdh.context executeFetchRequest:request error:nil]; 

    return Users; 

} 

该功能用于从表User中获取所有用户并返回用户数组。

我想打电话给在LoginVC.m这个功能,所以我把这个代码的功能viewDidLoad中:

UserController *userController = [[UserController alloc]init]; 

[userController getUsers]; 
NSArray *users = [[NSArray alloc]init]; 

users = [userController getUsers]; 

但是当我启动应用程序存在错误或警告 - Incomaptible指针类型分配给的NSArray *来自用户*,我不知道为什么是真正的问题,因为函数getAllUsers返回数组,我分配给数组。谢谢你的帮助。

+0

我们可以从UserController.h中看到getUsers的声明吗? –

+0

你的第二批代码似乎是多余的。最下面的三行可以合并成'NSArray * users = [userController getUsers];'。这可能会解决你的问题,但我不确定。 – hgwhittle

+0

不需要分配/ init用户,然后将其设置为[userController getUsers]的返回值。如果你使用的是弧,你可以这样做:NSArray * users = [userController getUsers],但是如果你不使用弧,只需在[userController getUsers]的末尾引入一个保留。 – daveMac

回答

2

我没有看到你发布的代码的任何User *,但我觉得对于编译器警告唯一合乎逻辑的解释是,在声明作为- (User *)getUsers而不是- (NSArray *)getUsers

+0

感谢这两个。我很抱歉,错误实际上是在UserController.h中。我在那里(用户*)而不是(NSArray *)。谢谢! – krata

2

着色给你提示。

重命名上线变量Usersusers

NSArray *Users = [cdh.context executeFetchRequest:request error:nil]; 
+0

这并不能解决他的问题。变量名称的情况是不相关的。堆栈溢出将它作为类名着色,因为通常类名是大写的。但它仍然是一个有效的变量名称。 – NathanAldenSr

+0

@NathanAldenSr抛开色彩,这个答案可能是相关的。有可能是由导致该问题的用户的名称的类。 – daveMac

+0

即使有,也不会导致他遇到的错误。他的错误与指针强制有关。 – NathanAldenSr

相关问题