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];