Ios 从用户分配给NSArray*的指针类型不兼容*
我是iOS编程的初学者,我需要一些从函数返回数组的帮助。 我有我的应用程序的这种结构(我不知道它是否正确): User.h/.m是从CoreData模型生成的文件,具有4个属性 LoginVC.h/.m用于登录应用程序(授权) UserController用于处理用户结构-保存用户、更新用户、获取所有用户等 我需要的是…我在UserController.m中有一个函数,该函数如下所示:Ios 从用户分配给NSArray*的指针类型不兼容*,ios,objective-c,arrays,return-value,Ios,Objective C,Arrays,Return Value,我是iOS编程的初学者,我需要一些从函数返回数组的帮助。 我有我的应用程序的这种结构(我不知道它是否正确): User.h/.m是从CoreData模型生成的文件,具有4个属性 LoginVC.h/.m用于登录应用程序(授权) UserController用于处理用户结构-保存用户、更新用户、获取所有用户等 我需要的是…我在UserController.m中有一个函数,该函数如下所示: -(NSArray *)getUsers{ CoreDataHelper *cdh = [(App
-(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];
但当我启动应用程序时,出现了一个错误或警告-不可映射的指针类型从用户*分配给NSArray*并且我不知道为什么会出现真正的问题,因为函数getAllUsers返回数组,我分配给数组。谢谢你的帮助。着色给你一个提示 在线将变量
Users
重命名为Users
:
NSArray *Users = [cdh.context executeFetchRequest:request error:nil];
色彩是给你一个提示 在线将变量
Users
重命名为Users
:
NSArray *Users = [cdh.context executeFetchRequest:request error:nil];
我在您发布的代码中没有看到任何
User*
,但我认为编译器警告的唯一逻辑解释是getUsers
在UserController.h
中声明为-(User*)getUsers
,而不是-(NSArray*)getUsers
我在您发布的代码中没有看到任何User*
,但我认为编译器警告的唯一逻辑解释是getUsers
在UserController.h
中声明为-(User*)getUsers
,而不是-(NSArray*)getUsers
我们可以从UserController.h中看到getUsers的声明吗?您的第二批代码似乎是多余的。最后三行可以合并为NSArray*users=[userController getUsers]代码>。这可能会解决您的问题,但我不确定。无需alloc/init users,然后将其设置为[userController getUsers]的返回值。如果您使用的是arc,您可以这样做:NSArray*users=[userController getUsers],但如果您不使用arc,只需在[userController getUsers]的末尾抛出一个retain。我应该注意,这不会解决问题……请参阅下面的答案以了解解决方法。但是如果你按照我上面的建议写的话,它会写对的。请问“弧”到底是什么?分配是自动执行的,当我分配返回值时?我们可以从UserController.h中看到getUsers的声明吗?您的第二批代码似乎是多余的。最后三行可以合并为NSArray*users=[userController getUsers]代码>。这可能会解决您的问题,但我不确定。无需alloc/init users,然后将其设置为[userController getUsers]的返回值。如果您使用的是arc,您可以这样做:NSArray*users=[userController getUsers],但如果您不使用arc,只需在[userController getUsers]的末尾抛出一个retain。我应该注意,这不会解决问题……请参阅下面的答案以了解解决方法。但是如果你按照我上面的建议写的话,它会写对的。请问“弧”到底是什么?当我分配返回值时,分配是自动执行的?这并不能解决他的问题。变量名的大小写是不相关的。堆栈溢出将其着色为类名,因为通常类名是大写的。它仍然是一个有效的变量名,但抛开颜色不谈,这个答案可能是相关的。可能有一个名为User的类导致了此问题。即使存在,也不会导致他遇到的错误。他的错误与指针强制有关。这并不能解决他的问题。变量名的大小写是不相关的。堆栈溢出将其着色为类名,因为通常类名是大写的。它仍然是一个有效的变量名,但抛开颜色不谈,这个答案可能是相关的。可能有一个名为User的类导致了此问题。即使存在,也不会导致他遇到的错误。他的错误与指针强制有关。多亏了这两者。很抱歉,错误确实发生在UserController.h中。我有(User*)而不是(NSArray*)。谢谢多亏了这两个。很抱歉,错误确实发生在UserController.h中。我有(User*)而不是(NSArray*)。谢谢