2016-12-02 11 views
4

Я запрашиваю и получаю NSSet, который содержит адрес клиента из Интернета. Поскольку я новичок в объективной разработке c, я не знаю, как получить страну, почтовый индекс и т. Д. Из этого набора. Поэтому я следовал Objective-C How to print NSSet on one line (no trailing comma/space), но мой вывод находится в форме объекта «0x7f99997b7a50». Как распечатать все строки в наборе? Заранее спасибо.Как распечатать содержимое NSSet?

Я попытался как этот

NSArray *ar = [customer.addresses allObjects]; 
for (int i = 0; i<ar.count; i++) 
{ 
    NSLog(@"arr %@",ar[i]); 
} 

Но выход обр:

<BUYAddress: 0x7fd451f6e050> 
+1

Просьба указать код. Трудно понять, где ваша проблема без кода. –

+0

Я просто хочу зарегистрировать содержимое NSSet. –

+0

Вы писали: «Итак, я последовал ...» - вот код, который вам нужно добавить к вашему вопросу здесь. Никто не может сказать вам, где ваше следующее пошло не так, не видя кода.Измените свой вопрос и добавьте его. И будьте быстрыми, прежде чем кто-то закроет этот вопрос как дубликат того, с которым вы ссылаетесь! – CRD

ответ

3

Если у вас есть собственный объект, возможно, потребуется переопределить description

Без переопределение:

-(void) testCustomObjects 
{ 
    CustomObject *co1 = [[CustomObject alloc] init]; 
    co1.name = @"James Webster"; 
    co1.jobTitle = @"Code Monkey"; 

    CustomObject *co2 = [[CustomObject alloc] init]; 
    co2.name = @"Holly T Canine"; 
    co2.jobTitle = @"Pet Dog"; 

    NSSet *set = [NSSet setWithObjects:co1, co2, nil]; 

    NSLog(@"%@", [set allObjects]); 
} 

производит:

2016-12-02 11:45:55.342 Playground[95359:4188387] (
    "<CustomObject: 0x600000037a20>", 
    "<CustomObject: 0x60000003ae20>" 
) 

Однако, если переопределить метод description в мой CustomObject класс:

-(NSString*) description 
{ 
    return [NSString stringWithFormat:@"%@ (%@)", self.name, self.jobTitle]; 
} 

я получаю следующее:

(
    "Holly T Canine (Pet Dog)", 
    "James Webster (Code Monkey)" 
) 

Если по каким-либо причинам вы не можете добавить метод описания, вы бы просто иметь доступ к соответствующим частям объекта; что-то вроде следующего:

NSArray *ar = [customer.addresses allObjects]; 
for (int i = 0; i<ar.count; i++) 
{ 
    NSLog(@"arr %@ (%@)",ar[i].name, ar[i].address); 
} 

У меня было немного посмотреть в библиотеке, которую вы используете. Попробуйте выполнить следующие действия:

for (BUYAddress *address in customer.addresses) 
{ 
    NSLog(@"Address: %@, %@, %@", address.address1, address.address2, address.city); 
} 
+0

У них нет метода описания. –

+0

Точно ... вы должны добавить один. Если по какой-либо причине вы не можете, проверьте редактирование. –

+0

Я добавил, что sdk через pod. –

2

Рассмотрим NSSet ниже,

NSSet *theNSSet = [NSSet setWithObjects:@"Chennai",@"Mumbai",@"Delhi", nil]; 

Преобразовать его в NSArray используя

NSArray *array = [theNSSet allObjects]; // theNSSet is replaced with your NSSet id 

Затем распечатайте его, как

NSLog(@"%@",array); 

Output им получать

( Ченнаи, Дели, Мумбаи )

В вашем случае:

- (NSMutableSet *)addressesSet { 
[self willAccessValueForKey:@"addresses"]; 
NSMutableSet *result = (NSMutableSet *)[self mutableSetValueForKey:@"addresses"]; 
[self didAccessValueForKey:@"addresses"]; 
NSLog(@"%@",[result allObjects]); // printing the nsset 
return result; 
} 
+0

Я пробовал как этот NSArray * ar = [customer.addresses allObjects]; for (int i = 0; i

+0

вместо петли для печати, просто дайте NSLog ("% @", аг) – Saranjith

+0

Теперь я обр ( "" ) –