2013-10-22 25 views
1

我有两个不同的视图控制器ViewController.m & teacherList.m。我想从teacherList.m中调用 - (NSMutableArray *)getTeachersList方法让它为我创建一个数组,然后能够在ViewController.m中使用它。我想这样做,只是硬编码它,而不是用测序或使用故事板通过视图控制器调用返回方法

ViewController.m的

#import "ViewController.h" 
#import "teacherList.h" 

@interface ViewController() 

@end 

@implementation ViewController 
@synthesize userView; 
- (void)viewDidLoad 
{ 
NSMutableArray *hey = [teacherList getTeachersList];; 

NSString *hello = [hey objectAtIndex:0]; 

[self say:hello]; 

[super viewDidLoad]; 
// Do any additional setup after loading the view, typically from a nib. 
} 

- (void)say:(NSString *)greet{ 
userView.text = greet; 
} 


- (void)didReceiveMemoryWarning 
{ 
[super didReceiveMemoryWarning]; 
// Dispose of any resources that can be recreated. 
} 

@end 

teacherList.m文件

#import "teacherList.h" 

@interface teacherList() 

@end 

@implementation teacherList 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
if (self) { 
    // Custom initialization 
} 
return self; 
} 

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

- (void)didReceiveMemoryWarning 
{ 
[super didReceiveMemoryWarning]; 
// Dispose of any resources that can be recreated. 
} 

-(NSMutableArray *)getTeachersList{ 
NSURL *website = [NSURL URLWithString:@"http://www2.qcc.mass.edu/facAbsence/default.asp"]; 



NSURLRequest *request = [NSURLRequest requestWithURL:website]; 



NSURLResponse* response = nil; 

NSError *error = nil; 

NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 

//storing data in a string 

NSString *myString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 

//putting it into an array to be 

//able to working wiht string or array 

NSArray *newString = [myString componentsSeparatedByString:@"\n"]; 


NSMutableArray *teacherArray = [[NSMutableArray alloc]init]; 
NSMutableString *curLineNum; 
NSString *curLine; 

int i; 

for (i = 0; i <[newString count]; i++) { 

    curLine = [newString objectAtIndex:i]; 

    if ([curLine rangeOfString:@"<strong>"].location != NSNotFound) { 

     NSScanner *theScanner = [NSScanner scannerWithString:curLine]; 

     [theScanner scanUpToString:@"<strong>" intoString:NULL]; 

     [theScanner setScanLocation: [theScanner scanLocation]+8]; 

     [theScanner scanUpToString:@"</strong>" intoString:&curLineNum]; 

     [teacherArray addObject:curLineNum]; 

    } 

} 
return teacherArray; 

} 


@end 
+2

你现有的代码有什么问题? – Marc

+0

您的代码按原样需要定义teacherList的实例。您可以改为使用getTeachersList方法代替类方法。 – rocky

+0

回答你现在已经删除的问题,找到一个iOS库,以编程方式使用cookie支持HTTP浏览。您需要在POST操作中提交凭据,而不是在URL中。 – halfer

回答

1

不要把方法getTeachersList在一个视图控制器。创建一个单独的对象,它是NSObject的一个子类。我们称之为TeacherListManager

然后问单身老师的名单。

呼叫可能是这样的:

TeacherListManager *theTeacherListManager = [TeacherListManager sharedTeacherListManager]; 

NSMutableArray *theTeacherList = theTeacherListManager.teachersList; 

if (theTeacherList == nil) 
    //Handle the case where the teacher list hasn't been loaded yet. 

请在目标C singleton设计模式搜索以获取更多信息。

您的getTeachersList方法当前编写为使用同步联网调用来获取教师列表,这很糟糕。如果有任何事情减缓网络连接,那么它可以挂起用户界面长达2分钟,直到连接超时。

您应该重写该方法以异步下载数据。

相关问题