0

我在我的 CRHViewControllerScript 类中创建了一个名为“bulletedArray”的 NSArray,我试图访问同一个数组并将其写在我的 CRHCommentSection 类的 NSLog 中。但是,它不是在写数组。我知道数组有效,可以在第一堂课上写出来。我认为我上下一堂课的方法很糟糕,但这是我的代码的样子。

“CRHViewControllerScript.h”

@interface CRHViewControllerScript : UIViewController <UITextViewDelegate> {

__weak IBOutlet UITextView *myTextView;

}

+ (NSArray*)theArray;
- (IBAction)chalkYes:(id)sender;
@end

“CRHViewControllerScript.m”

#import "CRHViewControllerScript.h"

static NSArray* bulletedArray = nil;

@interface CRHViewControllerScript ()

@end

@implementation CRHViewControllerScript

+ (NSArray*)theArray {
return bulletedArray;
}

- (IBAction)chalkYes:(id)sender {

//get the text inside the textView
NSString *textContents = myTextView.text;

textContents = [textContents stringByReplacingOccurrencesOfString:@"\n" withString:@""];

//make the array
NSArray *bulletedArray = [textContents componentsSeparatedByString:@"\u2022"];

//eliminate blank component at top of the array ("")
NSUInteger len = bulletedArray.count;
if (bulletedArray.count) {

    bulletedArray = [bulletedArray subarrayWithRange:NSMakeRange(1, len-1)]; 
}

//print out array 
NSLog(@"%@",bulletedArray); 

}

CRHCommentSection.h

#import <UIKit/UIKit.h>

@interface CRHCommentSection : UIViewController




@end

CRHCommentSection.m

#import "CRHCommentSection.h"
#import "CRHViewControllerScript.h"

@interface CRHCommentSection ()

@end

@implementation CRHCommentSection

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    NSArray *myArray = [CRHViewControllerScript theArray]; // This is how to call a Class     Method in Objective C
    NSLog(@"%@", myArray); 
}
4

3 回答 3

1
//make the array
NSArray *bulletedArray = [textContents componentsSeparatedByString:@"\u2022"];

这将创建一个名为的新变量,该变量bulletedArray位于

-(IBAction)chalkYes:(id)sender {

所以它掩盖了你在外面声明的全局。只需NSArray*从开头删除即可解决问题:

bulletedArray = [textContents componentsSeparatedByString:@"\u2022"];

编辑:

实例级方法和类级方法的命名法是分别以-或开头的方法之间的区别+

在您的代码中,+(NSArray*)theArray;是一个类级别的方法,可以[CRHViewControllerScript theArray];使用类名作为方法的接收者来调用。

-(IBAction)chalkYes:(id)sender;是实例级方法,必须在类的实际实例上调用,例如[myCRHViewScript chalkYes:nil];

正如@user490696 指出的那样,理想情况下,您应该将数组存储在实例级属性中并从方法中返回它,而不是将其存储在全局范围内。例如,您的myTextView变量是 ivar 或实例变量。这是每个类实例存储的变量。您可以创建一个返回此变量的方法,如下所示:

-(UITextView*) getTextView
{
    return myTextView;
}
于 2012-08-08T19:27:33.153 回答
0
NSArray *bulletedArray = [textContents componentsSeparatedByString:@"\u2022"];

//eliminate blank component at top of the array ("")
NSUInteger len = bulletedArray.count;
if (bulletedArray.count) {

    bulletedArray = [bulletedArray subarrayWithRange:NSMakeRange(1, len-1)]; 
}

上面的代码对你声明的静态没有影响。本地声明

NSArray *bulletedArray //hides the static variable

更改局部变量的名称,然后重新分配给静态变量(如果这是您的意图)。

于 2012-08-08T19:27:48.300 回答
0

您需要从一个实例而不是类中调用它。

只需将属性添加到CRHCommentSection

@property(strong, nonatomic) CRHViewControllerScript *theControllerScript

并在您的应用程序中将实例委托CRHViewControllerScript给这样的CRHCommentSection实例

theCRHCommentSection.theControllerScript = theViewCRHViewControllerScript; //replace those Values with the actual ones

您可以CRHCommentSection像这样访问它:

[self.theControllerScript theArray];
于 2012-08-08T19:52:10.913 回答