如果包含对象,如何询问数组?

时间:2010-08-18 17:17:34

标签: iphone nsarray nspredicate

我怎么能问一个数组是否包含一个项目,如果它是[[NSArray alloc] initWithObjects:@“那些对象”自动执行。 这是我最喜欢的.h

@interface FavoriteViewController : UITableViewController {
    NSMutableArray *favoritesArray;
    NSMutableArray *didContain;
}
@property (nonatomic, retain) NSMutableArray *favoritesArray;

@property (nonatomic, retain) NSMutableArray *didContain;

这是.m

 favoritesArray = [[NSMutableArray alloc]init];
didContain = [[NSMutableArray alloc]init];

if 
([favoritesArray containsObject:@"one"])
{

    [didContain addObject:@"one"];
}

并在详细视图controller.m中我有这段代码

[[NSMutableArray alloc] init];
[favoritesArray addObject: @"one"];

我让桌子工作但是没有出现......

2 个答案:

答案 0 :(得分:0)

  NSArray *yourArray = [[NSArray alloc] initWithObjects:@"Hello", @"World", nil];
  NSMutableArray *didContain = [[NSArray alloc] init];


  if([yourArray contains: @"Hello"])
{
        [didContain addObject:@"Hello"];
}

  NSArray *yourArray = [[NSArray alloc] initWithObjects:@"Hello", @"World", nil];
  NSMutableArray *didContain = [[NSArray alloc] init];

  [didContain addObject: [yourArray objectAtIndex:[yourArray indexOfObject:@"Hello"]];

所有这些以及更多内容都可以在apple docs中找到。请在下次首先进行谷歌搜索。祝你好运,希望这会有帮助。

答案 1 :(得分:0)

使用filteredArrayUsingPredicate: 请参阅NSArray Class ReferencePredicate Programming Guide

您似乎正在尝试在详细信息视图控制器中使用未初始化的属性。

通常,在init:viewDidLoad方法实现中初始化属性然后在父视图控制器中显示视图之前,使用属性访问器设置属性

这一行:

// DetailViewController.m initializer code
[[NSMutableArray alloc] init]; // returned object is not used

应该是:

 favoritesArray = [[NSMutableArray alloc] init]; // view controller initialization code

而不是叫这个:

 [favoritesArray addObject:@"one"]; 

创建detailViewController后,将favoritesArray设置为已过滤的数组

// FavoriteViewController.m 
MyDetailViewController *dvc = [[MyDetailViewController alloc] initWithNibName:@"MyDetailViewController" bundle:nil];

// populate the array
[dvc setFavoritesArray:didContain];

// Assuming you are using a navigation controller

[navigationController pushViewController:dvc animated:YES];
[dvc release];