新手问题。
我有2个Class,它们都是NSObject,AddressBook类和AddressCard类的子类。
AddressBook已
@property (nonatomic, copy) NSMutableString *bookName;
@property (nonatomic , strong) NSMutableArray *book;
而
AddressCard
@property (nonatomic, copy) NSMutableString *name, *email;
我将addressCard实例放入AddressBook实例
.name和.email到书中。
所以我的main.m看起来像这样
AddressCard *card1 = [AddressCard new];
AddressCard *card2 = [AddressCard new];
[card1 setName:@"Tony Stevenson" andEmail:@"TnT213@mail.com"];
[card2 setName:@"Ian Hicks" andEmail:@"BBn12@mail.com"];
AddressBook *myBook = [[AddressBook alloc]initWithName:@"Roland's Address book"];
[myBook addCard:card1];
[myBook addCard:card2];
问题1,如何仅使用单行显示包含地址卡的数组?
我知道另一种方式(showList方法),但我很好奇为什么我的 NSLog(@"%@",myAddressBook.book)
无效。并且只记录了这个:
my book (
"<AddressCard: 0x1001083e0>",
"<AddressCard: 0x10010a7a0>",)
- (void) showList{
// NSLog(@"%@",book);
NSLog(@"====== Contents of: %@ =======",bookName);
for (AddressCard *theCard in book) {
NSLog(@"%-20s %-32s", [theCard.name UTF8String],
[theCard.email UTF8String] );
}
NSLog(@"===============================");
}
问题2,How do I filter name on myAddressBook array using NSPredicate with Like parameter?
我试过但是XCode仍然抛出异常
//在这段代码中,我想过滤以stev
开头的.name元素NSPredicate *execPredicate = [NSPredicate predicateWithFormat:@"SELF
contains[c] 'Stev'"];
NSArray *Contain = [myBook.book filteredArrayUsingPredicate:execPredicate];
NSLog(@"%@",Contain);
有人能就这个问题给我一些指导吗?谢谢你的回复。
答案 0 :(得分:2)
NSLog(@"%@",myAddressBook.book)
使用description
方法打印数组元素,默认情况下会打印类名和地址。但是你可以
通过添加,覆盖description
类中的AddressCard
方法
跟随“AddressCard.m”(作为例子):
-(NSString *)description
{
return [NSString stringWithFormat:@"name:%@ email:%@", self.name, self.email];
}
在NSPredicate
中,您必须指定键进行过滤,例如:
[NSPredicate predicateWithFormat:@"name contains[c] 'Stev'"]
或更好
[NSPredicate predicateWithFormat:@"name contains[c] %@", @"Stev"]
即使搜索字词包含'
等特殊字符,第二种形式仍然有用。