Reputation: 10116
The following Objective-C statement does not work correctly.
cell.templateTitle.text=[(NSDictionary*) [self.inSearchMode?self.templates:self.filteredTemplates objectAtIndex:indexPath.row] objectForKey:@"title"];
However, if I split it into an if()
statement it works fine.
if(self.inSearchMode){
categorize=[(NSDictionary*)[self.filteredTemplates objectAtIndex:indexPath.row] objectForKey:@"categorize"];
} else {
categorize=[(NSDictionary*)[self.templates objectAtIndex:indexPath.row] objectForKey:@"categorize"];
}
What are the limitations of using the ternary operator in Objective-C? In other languages like C# the above ternary statement would have worked correctly.
Upvotes: 4
Views: 1936
Reputation: 16193
@cesarislaw is probably right about the order of operations.
However, the code will be more readable if you do something like this instead (and if you really insist on use of the ternary operator ;) ):
NSDictionary * templates = (NSDictionary *) (self.inSearchMode ? self.filteredTemplates : self.templates);
categorize = [[templates objectAtIndex:indexPath.row] objectForKey:@"categorize"];
Upvotes: 8
Reputation: 1599
My guess is that it's an order of operations issue. Have you tried:
[(self.inSearchMode?self.templates:self.filteredTemplates) objectAtIndex:indexPath.row]
(notice added parens)
Upvotes: 10