Ios 如何将参数(数组可变)从另一个类传递给函数?
下面是一些代码Ios 如何将参数(数组可变)从另一个类传递给函数?,ios,objective-c,arrays,Ios,Objective C,Arrays,下面是一些代码 PrjClass.m //this is my class with interface NSObject //my function -(void) printArrayToNSLog:(NSMutableArray*)arr{ for (int x=0;x<[arr count];x++) NSLog(@"Index %d = %@",x,[arr objectAtIndex:x]); } PrjClass.h //with NSObjec
PrjClass.m //this is my class with interface NSObject
//my function
-(void) printArrayToNSLog:(NSMutableArray*)arr{
for (int x=0;x<[arr count];x++)
NSLog(@"Index %d = %@",x,[arr objectAtIndex:x]);
}
PrjClass.h //with NSObject
//function declaration
-(void)printArrayToNSLog:(NSMutableArray*)arr;
PrjMain.h //with UIViewController
//i importer the class
#import "PrjClass.h"
@interface PrjMain : UIViewController{
PrjClass *function;
}
PrjMain.m //UIviewController
//declaration of array(s)
NSMutableArray *myArray;
myArray =[[NSMutable arrayWithObjects:@"String",@"String2",@"String3",nil];
[function printArrayToNSLog:myArray];//[thisisthevariableclassname funtionname:argument];
@end
PrjClass.m//这是我的类,接口为NSObject
//我的职能
-(无效)printArrayToNSLog:(NSMutableArray*)arr{
对于(int x=0;x而言,问题在于您从未创建PrjClass
的实例,因此function
仍然是nil
,并尝试在nil
对象上调用实例方法,而该对象不做任何操作
您要确保首先实例化函数
:
function = [[PrjClass alloc] init];
NSMutableArray *myArray = [[NSMutableArray arrayWithObjects:@"String",@"String2",@"String3",nil];
[function printArrayToNSLog:myArray];
或者,您也可以将其设置为类方法(在printArrayToNSLog
方法的声明之前放置+
,而不是-
):
您可以这样分配初始化类prjClass对象
PrjMain.m//UIviewController
//declaration of array(s)
NSMutableArray *myArray;
myArray =[[NSMutable arrayWithObjects:@"String",@"String2",@"String3",nil];
function = [[function alloc]init];
[function printArrayToNSLog:myArray];//[thisisthevariableclassname funtionname:argument];
@end
除了@Rob所说的,如果你让你的函数是静态的:
+(void) printArrayToNSLog:(NSMutableArray*)arr{
for (int x=0;x<[arr count];x++)
NSLog(@"Index %d = %@",x,[arr objectAtIndex:x]);
}
您将能够调用它,而无需创建该类的实例
[PrjClass printArrayToNSLog:myArray];
您已使用完全不同的问题更新了您的问题:
现在我唯一的问题是如何让应用程序在后台运行
这完全取决于你的意思:
- 你想在应用程序继续执行其他操作时运行一些耗时的任务吗
在这种情况下,您可以使用操作队列(
NSOperationQueue
)或调度队列(也称为Grand Central dispatch,GCD)。请参阅并观看一些关于GCD、并发、异步编程模式等的WWDC视频。在对该主题做了一些研究之前,不要发布有关该主题的问题
- 即使用户离开你的应用程序去做其他事情,你是否只想有一点时间来完成一项耗时的任务
在这种情况下,请参阅《iOS应用程序编程指南》一章背景部分中的“执行有限长度任务”。这将向您展示如何使用
beginBackgroundTaskWithExpirationHandler
启动耗时的过程,即使用户离开您的应用程序,该过程仍将继续
- 你想在应用程序终止后继续运行网络请求吗
在本例中,您将继续使用
NSURLSession
,尤其是后台会话
- 你想让你的应用程序定期在后台检查网络更新吗
在这种情况下,iOS 7提供了以下几种方法:
iOS 7支持两种新的应用程序后台执行模式:
- 通过联系服务器定期更新其内容的应用程序可以向系统注册,并定期启动以在后台检索该内容。要注册,请在应用程序的Info.plist文件中包含带有fetch值的
UIBackgroundModes
键。然后,在启动应用程序时,调用setMinimumBackgroundFetchInterval:
方法来确定它接收更新消息的频率。最后,您还必须在应用程序代理中实现应用程序:performFetchWithCompletionHandler:
方法
- 使用推送通知通知用户新内容可用的应用程序可以在后台获取内容。若要支持此模式,请在应用程序的Info.plist文件中包含带有远程通知值的
UIBackgroundModes
键。您还必须实现应用程序:DidReceiveMemoteNotification:fetchCompletionHandler:
应用程序委托中的方法
- 你想让你的应用程序在后台运行吗
这不是苹果支持的模式,除非是在非常特殊的情况下(VOIP、音乐播放器、导航应用程序等)。这是因为它是一个巨大的性能/电池杀手,所以他们确保你这样做是出于当之无愧的原因。再次,我想让你了解更多信息
一句话,这是无伤大雅的“如何让应用程序在后台运行”这个问题很复杂,由于不同的问题需要不同的解决方法,你需要更好地明确你想做什么。在你发布问题之前,请确保在苹果丰富的视频和文档库中研究这个主题,然后再发布一个关于这个主题的问题,否则你可能会收到反对票和否定c注意事项。您所说的“它不会转移到PrjClass”是什么意思?欢迎使用SO!请参见:。这就是-or+符号的含义!谢谢:)
+(void) printArrayToNSLog:(NSMutableArray*)arr{
for (int x=0;x<[arr count];x++)
NSLog(@"Index %d = %@",x,[arr objectAtIndex:x]);
}
+(void) printArrayToNSLog:(NSMutableArray*)arr
[PrjClass printArrayToNSLog:myArray];