Objective-C изменяет случайные значения для переменных - PullRequest
0 голосов
/ 19 августа 2010

Это действительно мое последнее средство, так как я абсолютно тупой, и я просто знаю, что это что-то глупое!

У меня есть UITableView и UISearchBar, пользователь использует панель поиска для ввода местоположения, котороезатем добавляется к URL с page = 1.Затем он отправляется в API и возвращается список объявлений (это было успешно).Затем пользователь может прокрутить до конца UITableView и нажать, чтобы загрузить следующую страницу результатов (номер страницы увеличивается, а API вызывается снова, также успешно).

Если я жестко запишу в переменную местоположения место "Лондон", реклама будет нормально загружаться на максимально возможное количество страниц, однако, когда я использую searchBar.text (что кажется правильным), страница 1 загружается нормально.но страница 2 падает / URL недействителен.Когда я выводил переменную местоположения, она либо больше не является строкой и поэтому вылетает, или это какие-то случайные данные.

Я много раз искал в Интернете и ничего не нашел и застрял в этом в течение 2 дней, любая помощьбудет принята с благодарностью:)

Мой код выглядит следующим образом:

PropertySearchTableViewController.h

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

@interface PropertySearchTableViewController : UITableViewController <UISearchBarDelegate, UITableViewDelegate, UITableViewDataSource> {

    IBOutlet UITableView *propertiesTableView;
    UISearchBar *propertiesTableSearch;
    NSMutableArray *propertiesArray;

    NSString *location;
}

@property (nonatomic, retain) IBOutlet UISearchBar *propertiesTableSearch;
@property (nonatomic, retain) NSMutableArray *propertiesArray;
@property (nonatomic, retain) NSString *location;

- (void)loadProperties;
- (void)callback:(NSDictionary *)response;

@end

PropertySearchTableViewController.m

#import "PropertySearchTableViewController.h"
#import "JSONHandler.h"

@implementation PropertySearchTableViewController
@synthesize location;
@synthesize propertiesArray;
@synthesize propertiesTableSearch;

int page = 1;

#pragma mark -
#pragma mark View lifecycle

- (void)viewDidLoad {
    location = @"London";
    [self.propertiesTableSearch becomeFirstResponder];
    self.propertiesArray = [[NSMutableArray alloc] init];
    [self loadProperties];
    self.title = @"Properties";
}

- (void)loadProperties {
    NSLog(@"Calling: %@", ([location isKindOfClass:[NSString class]] ? location : @"No longer a string"));
    NSString *url = [NSString stringWithFormat:@"http://local.somewebsite.co.uk/adverts/?where=%@&page=%i", location, page];
    JSONHandler *handler = [[JSONHandler alloc] initWithUrl:url andData:nil callbackObject:self];
    [handler handleConnection];
}

- (void)callback:(NSDictionary *)response {
    NSArray *properties = [response objectForKey:@"results"];
    NSEnumerator *enumerator = [properties objectEnumerator];
    NSDictionary* item;
    while (item = (NSDictionary*)[enumerator nextObject]) {
        NSDictionary *d = item;
        [propertiesArray addObject:d];
    }
    [self.tableView reloadData];
}

#pragma mark -
#pragma mark Table view data source

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

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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }
    NSDictionary *d = [propertiesArray objectAtIndex:indexPath.row];
    cell.textLabel.text = [d objectForKey:@"ad_title"];
    return cell;
}

#pragma mark -
#pragma mark Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
    CGPoint p = scrollView.contentOffset;
    CGSize  s = scrollView.contentSize;
    CGSize scrollSize = scrollView.bounds.size;
    if((p.y+scrollSize.height) > (s.height+50)){
        self.tableView.contentSize = CGSizeMake(0, s.height+50);
        page++;
        [self loadProperties];
    }
}

//Search

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar {
    [searchBar setShowsCancelButton:YES animated:YES];
    self.tableView.scrollEnabled = NO;
}

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar {
    searchBar.text=@"";
    [searchBar setShowsCancelButton:NO animated:YES];
    [searchBar resignFirstResponder];
    self.tableView.scrollEnabled = YES;
}

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
    location = (NSString *) searchBar.text;
    page = 1;
    NSLog(@"%@", searchBar.text);
    [propertiesArray removeAllObjects];
    [self loadProperties];
    [self.tableView reloadData];
    [searchBar setShowsCancelButton:NO animated:YES];
    [searchBar resignFirstResponder];
    self.tableView.scrollEnabled = YES;
}

#pragma mark -
#pragma mark Memory management

- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Relinquish ownership any cached data, images, etc that aren't in use.
}

- (void)viewDidUnload {
    // Relinquish ownership of anything that can be recreated in viewDidLoad or on demand.
    // For example: self.myOutlet = nil;
}


- (void)dealloc {
    [location release];
    [propertiesTableSearch release];
    [super dealloc];
}


@end

1 Ответ

0 голосов
/ 19 августа 2010

Возможно, виновна эта строка:

location = (NSString *) searchBar.text;

Вам необходимо сохранить / скопировать строку, иначе она исчезнет!

[location release]; //!< Release the last location string
[location = [[searchBar text] copy]; //!< Get a copy of the new one
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...