In some cases the line ends are not "=\r\n" but are only "=\n", in which case you need another step:
decodedString = [self stringByReplacingOccurrencesOfString:@"=\n" withString:@""];
Otherwise, the final step fails due to the unbalanced "%" at the end of a line.