0

まず最初に、私は iPhone 開発の 100% 初心者です。これは、経験のある人にとっては非常に簡単な質問だと思います。とにかく、私がやろうとしていることは次のとおりです。

ユーザーは、SearchUI を介してデータベースからオブジェクトを検索できる必要があります。オブジェクトが存在する場合は、検索オブジェクトが表示される tableView に表示します。データベースからオブジェクトを取得することはできますが、それらをテーブルビューにインスタンス化して表示することはできません。

正直なところ、私は自分が間違っていることを知りません。すべてのヘルプは本当に高く評価され、可能であれば説明もされます。メソッドの下で - (void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)objects- オブジェクトを tableView に移動しようとしましたが、成功しませんでした。このメソッドは、 TableView Data Source メソッドFirstViewController.mの最後にあります。pragma markこれが私のコードです:

FirstViewController.h クラス

#import <UIKit/UIKit.h>
#import <RestKit/RestKit.h>

@interface FirstViewController : UIViewController <UITableViewDataSource,           RKObjectLoaderDelegate>
{ 
UISearchDisplayController *searchDisplayController;
UISearchDisplayController *searchBar;
UITableView *table;
NSArray *allItems;
NSArray *searchResults;

}

@property (nonatomic, retain) IBOutlet UISearchDisplayController     *searchDisplayController;
@property (nonatomic, retain) IBOutlet UISearchDisplayController *searchBar;
@property (nonatomic, retain) IBOutlet UITableView *table;
@property (nonatomic, copy) NSArray *allItems;
@property (nonatomic, copy) NSArray *searchResults;
@end

FirstViewController.m クラス

#import "FirstViewController.h"
#import "Task.h"

interface FirstViewController ()

end

implementation FirstViewController

@synthesize searchDisplayController;
@synthesize searchBar;
@synthesize allItems;
@synthesize searchResults;
@synthesize table;

#pragma mark - View lifecycle

- (void)viewDidLoad
{
//self.listContent = [[NSArray alloc] initWithObjects:@"John", @"Paul", nil];

//self.filteredListContent = [NSMutableArray arrayWithCapacity:10];

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

- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
}

- (BOOL)shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation)interfaceOrientation
{
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
{
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
else
{
    return YES;
}
}


-(BOOL)searchDisplayController:(UISearchDisplayController *)controller   shouldReloadTableForSearchString:(NSString *)searchString
{
return NO;
}

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller  shouldReloadTableForSearchScope:(NSInteger)searchOption
{
return NO;
}


- (void)searchBarSearchButtonClicked:(UISearchBar *)pSearchBar
{
[[RKObjectManager sharedManager].mappingProvider setMapping:[Task getMapping]  forKeyPath:@"tasks"];

NSString *path = [NSString stringWithFormat:@"%@/%@/%@", @"/book/1/tasks/", pSearchBar.text, @".json"];
[[RKObjectManager sharedManager] loadObjectsAtResourcePath:path delegate:self];
NSLog(@"Search: %@", pSearchBar.text);  
}

#pragma mark - TableView Data Scource methods

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [self.searchResults count];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
{
UITableViewCell *cell = nil;

cell = [tableView dequeueReusableCellWithIdentifier:@"MyCell"];

if(cell == nil)
{
    cell =  [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault  reuseIdentifier:@"MyCell"];
}

cell.textLabel.text = [self.searchResults objectAtIndex:indexPath.row];
return cell;
}

- (void) deselect { 
//[self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow]  animated:YES];
 }

// Respond to user selection tap by coloring the navigation bar
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath  *)newIndexPath
{

}


- (void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)objects
{
self.searchResults = objects;

[self.table reloadData];


for(Task *task in objects)
{
    if ([task isKindOfClass:[Task class]])
    {
        NSLog(@"Loaded Book ID: %@ ; Name: %@ ; Book: %@", task.id, task.name,  task.book.name);  
    }
}

}

- (void)objectLoader:(RKObjectLoader *)objectLoader didFailWithError:(NSError *)error
{
NSLog(@"Encountered an error: %@", error);  
}
@end
4

2 に答える 2

0

最初の行で

@interface FirstViewController : UIViewController <UITableViewDataSource,           RKObjectLoaderDelegate>
 { 
UISearchDisplayController *searchDisplayController;
UISearchDisplayController *searchBar;
UITableView *table;
NSArray *allItems;
NSArray *searchResults;
}

この行を以下のコードに置き換えます

@interface FirstViewController : UIViewController <UITableViewDataSource, UITableViewDelegate, RKObjectLoaderDelegate>
 { 
UISearchDisplayController *searchDisplayController;
UISearchDisplayController *searchBar;
IBOutlet UITableView *table;
NSArray *allItems;
NSArray *searchResults;
}

そして、interfaceBuilderでtableviewデリゲートとtableviewデータソースを接続します。

それが役に立てば幸い。

于 2012-08-17T06:18:25.353 に答える
0

ステップ1。TableView は IBOutlet であるため、このビュー コントローラーの .xib ファイルで tableView データソースとデリゲート マッピングを確認してください。私の疑問は、フッキングが正しくないということです。

ステップ2。.xib ファイルの接続が正しい場合は、次のことを行う必要があります。

- (void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)objects
{
   self.searchResults = objects;
   NSLog(@"%@", searchResults)
   [self.table reloadData];

....
}

NSLog が searchResults 配列を記録しているかどうかを確認します。何らかの理由でそれが空の場合、numberOfRowsInSection デリゲート メソッドは 0 を返すため、tableView は空になります。

お役に立てれば。

于 2012-08-17T05:35:12.780 に答える