NSDictionary выбран на листе действий, из UITableView с пользовательскими ячейками - PullRequest
0 голосов
/ 08 марта 2011

Я работаю над большим опытом обучения, добавляя NSDictionary, который использует JSON (десериализатор), чтобы захватывать контент с моего сервера MAMP (myphp admin) (localhost), и аккуратно помещать всю эту информацию в TablewView, который имеет пользовательскийUITableViewCell,

моя проблема в том, что табличное представление прекрасно загружает информацию с моего сервера, однако, когда я использую didSelectRowatIndexPath, с листом действий, я могу получить лист действий, но не могу его получитьчтобы извлечь информацию из моего NSDictionary, который ранее использовался в UITableView .... (в основном, в конце концов, на листе действий будет несколько кнопок, например загрузка URL-адреса из общего приложения, и вся эта информация будет захваченас моего сервера, используя тот же NSDictionary в UITable View.

любая помощь будет принята с благодарностью ...... большое спасибо, что это сообщество качается !!!

//
//  TouchJSONViewController.m
//  TouchJSON
//
//  Created by Chance Brown on 3/7/11.
//  Copyright 2011 __MyCompanyName__. All rights reserved.
//

#import "TouchJSONViewController.h"
#import "CJSONDeserializer.h"
#import "StaffPicksCustomCell.h"
#import "UIImageView+WebCache.h"

@implementation TouchJSONViewController

@synthesize tableview, rows, cellOne;

- (void)viewDidLoad {
    [super viewDidLoad];    
    NSURL *url = [NSURL URLWithString:@"http://localhost/json.php"]; // Modify this to match your url.
    // HOME 192.168.2.23    
    NSString *jsonreturn = [[NSString alloc] initWithContentsOfURL:url]; // Pulls the URL
//  NSLog(jsonreturn); // Look at the console and you can see what the restults are 
    NSData *jsonData = [jsonreturn dataUsingEncoding:NSUTF32BigEndianStringEncoding];
    NSError *error = nil;   
    // In "real" code you should surround this with try and catch
    NSDictionary * dict = [[CJSONDeserializer deserializer] deserializeAsDictionary:jsonData error:&error];
    if (dict)
    {
        rows = [[dict objectForKey:@"users"] retain];
    }
    NSLog(@"Array: %@",rows);   
    [jsonreturn release];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [rows count];
}
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {    
    static NSString *CellIdentifier = @"Cell";
    StaffPicksCustomCell *cell =(StaffPicksCustomCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[StaffPicksCustomCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
    }

    // Configure the cell.  
    NSSortDescriptor *ratingsSortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"ID" ascending:NO] autorelease];
    rows = [rows sortedArrayUsingDescriptors:[NSArray arrayWithObject:ratingsSortDescriptor]];

    NSDictionary *dict = [rows objectAtIndex: indexPath.row];

    cell.primaryLabel.text = [dict objectForKey:@"post_title"];
    cell.theDate.text = [dict objectForKey:@"post_date"];
    cell.mydescription.text = [dict objectForKey:@"post_content"];  

    [cell.myImageView setImageWithURL:[NSURL URLWithString:[dict objectForKey:@"imagelink"]]
                     placeholderImage:[UIImage imageNamed:@"placeholder1.png"]];


    //cell.textLabel.text = [dict objectForKey:@"post_title"];
    //cell.detailTextLabel.text = [dict objectForKey:@"post_content"];  
    //tableView.backgroundColor = [UIColor cyanColor];  
    return cell;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 125;
}

#pragma mark -
#pragma mark Table view delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";
    StaffPicksCustomCell *cell = (StaffPicksCustomCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"StaffPicksCustomCell" owner:self options:nil];
        for (id currentObject in topLevelObjects) {
            if ([currentObject isKindOfClass:[StaffPicksCustomCell class]]) {
                cell= (StaffPicksCustomCell *) currentObject;
                break;
            }
        }
    }   
    // Configure  - Did Select Row at Index Path.
    UIActionSheet *popup = [[UIActionSheet alloc] initWithTitle:@"OPTIONS" delegate:self cancelButtonTitle:@"Cancel"destructiveButtonTitle:nil otherButtonTitles:@"More Info",@"Contact Seller",@"Picture", nil];   
    [popup setActionSheetStyle:UIActionSheetStyleBlackTranslucent];
    [popup showInView:[self view]];
    [popup release];
    // return cell  
}

-(void)actionSheet:(UIActionSheet *)actionSheet willDismissWithButtonIndex:(NSInteger)indexPath
{

    switch (indexPath) {
        case 0:
        {
            NSLog(@"Case 0 Selected");
            NSDictionary *dict = [rows objectAtIndex: indexPath];
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[dict objectForKey:@"guid"]]];
        }

            break;

        case 1: 
        {
        NSLog(@"Case 1 Selected");  
        }
            break;  
        case 2:
        {
        NSLog(@"Case 2 Selected");  
        }
            break;
    }

}

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

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

- (void)viewDidUnload {
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (void)dealloc {
    [super dealloc];
}

@end

1 Ответ

0 голосов
/ 08 марта 2011

Это строки, они выпускаются автоматически. Вот важные строки.

Первая строка в viewDidLoad правильно сохраняет строки

rows = [[dict objectForKey:@"users"] retain];

Но вы сортируете эти строки в cellForRowAtIndexPath и не сохраняете его.

rows = [rows sortedArrayUsingDescriptors:[NSArray arrayWithObject:ratingsSortDescriptor]];

Это должно быть что-то вроде:

NSArray *sortedRows = [rows sortedArrayUsingDescriptors:[NSArray arrayWithObject:ratingsSortDescriptor]];
[rows release];
rows = [sortedRows retain];

Надеюсь, это поможет.

...