2015-10-22 6 views
-2

У меня возникли проблемы с этим методом, более конкретно у меня возникают проблемы с моей логикой. Я пытаюсь объединить два массива firstName и lastName, которые последовательно совпадают. Я думал, что я мог бы использовать цикл for для итерации по счету массива, а затем объединить массив с использованием arrayByAddingObjectsFromArray.Непризнанный селектор, отправленный в экземпляр

К сожалению, кажется, что эта часть бросает ошибку: __NSCFConstantString arrayByAddingObjectsFromArray:]: unrecognized selector sent to instance 0x10c824218

Любые идеи, почему это? Что означает селектор; что ему не нравится массив, который я пытаюсь передать ему?

- (NSString *)badgeForSpeaker:(NSString *)speaker{ 


    NSArray *firstName = @[@"Adele", @"Edsger", @"Joan", @"Clarence", @"Margaret", @"George", @"Tim", @"Jean"]; 
    NSArray *lastName = @[@"Goldberg",@"Dijkstra",@"Clarke",@"Ellis",@"Hamilton",@"Boole",@"Berners-Lee",@"Bartik"]; 


    NSString *uppercaseString = [speaker copy]; 
    NSMutableString *hello = [[NSMutableString alloc]init]; 

    for (NSUInteger i =0; i < [lastName count] ; i++) { 
     uppercaseString = [lastName[i] capitalizedString]; 
     hello = [@"Hello, my name is " mutableCopy]; 
     firstName = [firstName[i] arrayByAddingObjectsFromArray:lastName[i]]; 
     NSString *fullNameString = [firstName componentsJoinedByString:@" "]; 
     [hello appendFormat:@"%@",fullNameString]; 
     NSLog(@"%@",hello); 

    } 

    return hello; 
} 
+2

ПгвЬЫате [я] возвращает NSString объект , метод arrayByAddingObjectsFromArray принадлежит NSArray – ProblemSlover

+0

Можете ли вы рассказать нам, что вы ожидаете от Hello? – deadbeef

+0

Моя вина, я ожидаю, что «привет» вернет строку «Привет, мое имя [firstName] [lastName]». –

ответ

1

Вы получаете эту ошибку, поскольку метод arrayByAddingObjectsFromArray не определен для объекта NSString. Вы пытаетесь использовать этот метод с объектом NSSting, поскольку имя [i] возвращает NSString, а не NSArray.

Почему RU усложнять вы можете достичь того же с помощью

NSArray *firstName = @[@"Adele", @"Edsger", @"Joan", @"Clarence", @"Margaret", @"George", @"Tim", @"Jean"]; 
    NSArray *lastName = @[@"Goldberg",@"Dijkstra",@"Clarke",@"Ellis",@"Hamilton",@"Boole",@"Berners-Lee",@"Bartik"]; 

    NSMutableArray *array = [[NSMutableArray alloc] init]; 
    NSString *hello; 

    for (NSUInteger i = 0; i < [lastName count] ; i++) { 
     NSString *fullName = [[[firstName objectAtIndex:i] uppercaseString]stringByAppendingString:[@" " stringByAppendingString:[[lastName objectAtIndex:i]uppercaseString]]]; 

     [array addObject:fullName]; 
     hello = [NSString stringWithFormat:@"Hello, my name is %@", fullName]; 
     NSLog(@"%@",hello); 
    } 

Надеется, что это помогает .. Счастливый Coding .. :)

+0

Спасибо, что повезло! –

+0

приветствуется .. в любое время .. :) – luckyShubhra

1

Если я правильно undestand, вы хотите, чтобы строка привета быть

Здравствуйте, меня зовут Firstname Lastname

Вы можете сделать это:

NSArray *firstName = @[@"Adele", @"Edsger", @"Joan", @"Clarence", @"Margaret", @"George", @"Tim", @"Jean"]; 
NSArray *lastName = @[@"Goldberg",@"Dijkstra",@"Clarke",@"Ellis",@"Hamilton",@"Boole",@"Berners-Lee",@"Bartik"]; 

NSMutableArray *fullNameArray = [[NSMutableArray alloc] init]; 
NSString *hello; 
NSString *uppercaseString = [speaker copy]; 

for (NSUInteger i = 0; i < [lastName count] ; i++) { 

    uppercaseString = [lastName[i] capitalizedString]; 

    //join firstName and lastName in a string 
    NSString *fullName = [[firstName objectAtIndex:i] stringByAppendingString:[NSString stringWithFormat:@" %@", uppercaseString]]; 

    //add fullName string to fullNameArray 
    [fullNameArray addObject:fullName]; 

    //set it in hello string 
    hello = [NSString stringWithFormat:@"Hello, my name is %@", fullName]; 

    NSLog(@"%@",hello); 
} 
+0

Спасибо tnylee, это определенно ближе соответствует моему исходному коду и логике. Цените помощь –

1

Метод arrayByAddingObjectsFromArray: используется для соединения двух массивов. Вот как это работает:

NSArray * first = @[@1, @2, @3]; //[1, 2, 3] 
NSArray * second = @[@4, @5]; //[4, 5] 
NSArray * bothArrays = [first arrayByAddingObjectsFromArray:second]; // [1, 2, 3, 4, 5] 

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

NSArray * fullNameComponents = [@[firstName[i]] arrayByAddingObjectsFromArray:@[lastName[i]]]; 

но это как самый unefficient whay сделать что. Намного лучше, чтобы создать массив мгновенно:

NSArray * fullNameComponents = @[firstName[i], secondName[i]]; 

В вашем случае лучший вариант будет пропускать всю работу массива, а также создать строку, используя формат:

NSString * hello = [NSString stringWithFormat:@"Hello, my name is %@ %@", firstName[i], secondName[i]]; 
+0

Ничего себе отличное объяснение, спасибо Антону! –

Смежные вопросы