我有一个名为array的自定义对象数组,它存储了一堆核心数据。我使用这个数组来填充我的UITableView并创建单元格。然后我尝试在打开UISearch时使用相同的数组,但此时数组为空,我怎么能保留数组中的对象?
修改
好的,这是我的一些代码
我的.h文件
@interface SelectCourses : UIViewController <DataHandlerDelegate, UITableViewDataSource, UITableViewDelegate, UITableViewDataSource> {
DataHandler *dataHandler;
NSMutableArray *courses;
IBOutlet UITableView *table;
IBOutlet UISearchBar *searchFilter;
//NSMutableArray *filteredCourses;
BOOL isFiltered;
}
@property (retain) NSMutableArray* filteredCourses;
然后我的.m文件,我遗漏了几个我认为无关的函数
@implementation SelectCourses
@synthesize Delegate;
@synthesize filteredCourses;
...
...
- (void) dataHandlerHasLoadedCourseData:(NSMutableArray *)courseData {
courses = courseData;
[table reloadData];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if(isFiltered){
return filteredCourses.count;
}
if (courses) {
NSLog(@"Count: %i", [courses count]);
if (courses.count == 1) {
return 0;
}
return [courses count];
}
else
return 0;
}
...
...
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchFiltert {
NSLog(@"searchBarSearchButtonClicked");//More debugging
if(searchFilter.text.length == 0)
{
isFiltered = FALSE;
}
else
{
NSLog(@"%@", [NSString stringWithFormat:searchFilter.text]);
isFiltered = true;
for (Course *course in courses)
{
NSRange codeRange = [course.Code rangeOfString:searchFilter.text options:NSCaseInsensitiveSearch];
NSRange nameRange = [course.Name rangeOfString:searchFilter.text options:NSCaseInsensitiveSearch];
if(codeRange.location != NSNotFound || nameRange.location != NSNotFound)
{
[filteredCourses addObject:course];
}
}
}
[table reloadData];
}
运行脚本时我仍然遇到以下错误,我只是假设它是由于数组为空
2012-04-11 20:54:23.067 scheduleTable[45885:fb03] -[__NSArrayM Code]: unrecognized selector sent to instance 0x897b360
2012-04-11 20:54:23.068 scheduleTable[45885:fb03] *** WebKit discarded an uncaught exception in the webView:shouldInsertText:replacingDOMRange:givenAction: delegate: <NSInvalidArgumentException> -[__NSArrayM Code]: unrecognized selector sent to instance 0x897b360
我的course.h和.m看起来像这样
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@class Post;
@interface Course : NSManagedObject
@property (nonatomic, retain) NSString *Code;
@property (nonatomic, retain) NSString *Name;
@end
和
#import "Course.h"
#import "Post.h"
@implementation Course
@synthesize Code;
@synthesize Name;
@end
答案 0 :(得分:0)
如果我正确理解你的问题,要保留你的数组,请在.h文件中声明数组,如下所示:
@property (retain) NSMutableArray *yourArrayName;
然后,在.m文件中合成它,如下所示:
@synthesize yourArrayName;
答案 1 :(得分:0)
我尝试使用retain方法,因为Oral b回答但是它让我无处可去,我对Objective c有点新手,这就是我遇到问题的原因。
我的课程数组是在界面中声明的,我无法使用它为我为搜索创建的新数组获得相同的结果。所以在ViewDidLoad中我这样做
coursesForSearch = [[NSMutableArray alloc] init];
然后将对象添加到我的另一个数组中,我只是添加了这个数组,并将对象添加到它。
现在我可以像这样从数组中获取对象
[[coursesForSearch objectAtIndex:500] objectAtIndex:0]);