在对象数组中使用数据

时间:2012-04-17 09:37:38

标签: iphone objective-c ios xcode nsarray

我有一个名为[self.places objectAtIndex:indexPath.row]的数组;我试图输出到表中。数组中充满了对象,但是我想使用对象内部的数据,将它们分配给对象的最佳方法是什么?数组中的数据如下:

<Place:eXMSFqDg7B> {
    Location = "<PFGeoPoint: 0x6887480>";
    addressline1 = "address line 1";
    addressline2 = "address line 2";
    agerestrictions = "18+";
    email = "test@aol.com";
    image = "<PFFile: 0x6887af0>";
    name = "Rain NightClub";
    phone = 0123456789;
    postcode = BT11TG;
    type = Club;
}
2012-04-17 00:29:59.501 ClubsNIparse[3517:f803] <Place:95KvPCrSY1> {
    Location = "<PFGeoPoint: 0x6888330>";
    addressline1 = "address line 1";
    addressline2 = "address line 2";
    agerestrictions = "18+";
    email = "test@aol.com";
    image = "<PFFile: 0x6888950>";
    name = "Box NightClub";
    phone = 0123456789;
    postcode = BT11TG;
    type = Club;
}
2012-04-17 00:29:59.502 ClubsNIparse[3517:f803] <Place:6AxpfrY0DZ> {
    Location = "<PFGeoPoint: 0x6889260>";
    addressline1 = "address line 1";
    addressline2 = "address line 2";
    agerestrictions = "18+";
    email = "test@aol.com";
    image = "<PFFile: 0x6889880>";
    name = Laverys;
    phone = 0123456789;
    postcode = BT11TG;
    type = Club;
}

感谢。

编辑---

如建议创建一个NSObject并分别设置字段但收到此错误: 2012-04-17 11:09:08.363 ClubsNIparse [4906:f803] - [PFObject位置]:无法识别的选择器发送到实例0x6b4e4a0 2012-04-17 11:09:08.364 ClubsNIparse [4906:f803] *由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [PFObject Location]:无法识别的选择器发送到实例0x6b4e4a0' * 第一次抛出调用堆栈: (0x19d5052 0x1f89d0a 0x19d6ced 0x193bf00 0x193bce2 0x13434 0xc01e0f 0xc02589 0xbeddfd 0xbfc851 0xba7301 0x19d6e72 0x1a992d 0x1b3827 0x139fa7 0x13bea6 0x1c730c 0xb79530 0x19a99ce 0x1940670 0x190c4f6 0x190bdb4 0x190bccb 0x251f879 0x251f93e 0xb68a9b 0x2722 0x2695) 终止调用抛出异常当前

我的代码如下:

Place.h(NSObject)

@interface Place : NSObject
{
    NSString * Location;
    NSString * addressline1;
    NSString * addressline2;
    NSString * agerestrictions;
    NSData * image;
    NSString * email;
    NSString * name;
    NSString * phone;
    NSString * postcode;
    NSString * type;

}

@property (nonatomic, retain) NSString * Location;
@property (nonatomic, retain) NSData * image;
@property (nonatomic, retain) NSString * addressline1;
@property (nonatomic, retain) NSString * addressline2;
@property (nonatomic, retain) NSString * agerestrictions;
@property (nonatomic, retain) NSString * email;
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSString * phone;
@property (nonatomic, retain) NSString * postcode;
@property (nonatomic, retain) NSString * type;

-(NSComparisonResult) compareWithAnotherPerson:(Place*) p;

@end

Place.m

#import "Place.h"

@implementation Place

@synthesize name,addressline1,addressline2,email,phone,postcode,type,agerestrictions;
@synthesize Location,image;

-(void) dealloc
{

    self.name = nil;
    self.addressline1 = nil;
    self.addressline2 = nil;
    self.email = nil;
    self.phone = nil;
    self.postcode = nil;
    self.type = nil;
    self.agerestrictions = nil;
    self.Location = nil;
    self.image = nil;


    [super dealloc];


}

-(NSComparisonResult) compareWithAnotherPerson:(Place*) p
{
    return [[self name] compare:[p name]];
}


@end

TableView.h(我想列出数据的地方)

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

@class Place;

@interface NearbyViewController : UITableViewController
{
    NSArray * places;
}

@property (nonatomic,retain) NSArray * places;

@end

TableView.m

#import "NearbyViewController.h"
#import <Parse/Parse.h>
#import "Place.h"

@implementation NearbyViewController

@synthesize places;

- (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.
}

#pragma mark - View lifecycle

- (void)viewDidLoad
{
    self.title = @"Nearby";
    PFGeoPoint *userGeoPoint = [PFGeoPoint geoPointWithLatitude:37.856965 longitude:-122.483826];
    PFQuery *query = [PFQuery queryWithClassName:@"Place"];
    //[query whereKey:@"Location" nearGeoPoint:userGeoPoint withinMiles:10.0];
    [query whereKey:@"Location" nearGeoPoint:userGeoPoint];

    NSArray *placeObjects = [query findObjects];

    self.places = placeObjects;
    NSLog(@"%i",[self.places count]);

    UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"background_texture.png"]];
    // self.tableView st
    self.view.backgroundColor = background;

    [background release];

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

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

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
    return [self.places 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];
    }
    Place*p = [self.places objectAtIndex:indexPath.row];
    NSLog(@"%@",[self.places objectAtIndex:indexPath.row]);
    cell.textLabel.text = [NSString stringWithFormat:@"%@",p.name];
    cell.textLabel.textColor = [UIColor whiteColor];
    NSLog(@"%@",p);
    return cell;
}

/*
 // Override to support conditional editing of the table view.
 - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
 {
 // Return NO if you do not want the specified item to be editable.
 return YES;
 }
 */

/*
 // Override to support editing the table view.
 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
 {
 if (editingStyle == UITableViewCellEditingStyleDelete) {
 // Delete the row from the data source
 [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
 }   
 else if (editingStyle == UITableViewCellEditingStyleInsert) {
 // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
 }   
 }
 */

/*
 // Override to support rearranging the table view.
 - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
 {
 }
 */

/*
 // Override to support conditional rearranging of the table view.
 - (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
 {
 // Return NO if you do not want the item to be re-orderable.
 return YES;
 }
 */

#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Navigation logic may go here. Create and push another view controller.
    /*
     <#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil];
     // ...
     // Pass the selected object to the new view controller.
     [self.navigationController pushViewController:detailViewController animated:YES];
     [detailViewController release];
     */
}

@end

1 个答案:

答案 0 :(得分:7)

您可以使用以下

NSString* strAddress = [[self.places objectAtIndex:indexPath.row]valueForKey:@"addressline1"];

在给出 indexPath.row 后,使用 valueForKey:方法从对象中检索值。为所有价值做到这一点,你就会得到它。

要在tableview中打印,请在 CellForRowAtIndexPath

中编写上述代码
 NSString* strAddress = [[self.places objectAtIndex:indexPath.row]valueForKey:@"addressline1"];
 cell.textLabel.text = strAddress;

使用此代码,所有address1数据将显示在tableview行