行上有一个错误,表示totalSelection = [[NSString alloc] initWithFormat:dataView.text];并且错误说格式字符串不是文字,这是什么意思?
- (void)viewDidLoad {
clientName= [[NSArray alloc] initWithObjects:@"Bob",@"Pete",@"Julie",@"Stacey",@"Eric", nil];
anteCedent= [[NSArray alloc] initWithObjects:@"Demand",@"Alone",@"Transition",@"FreePlay",@"Eating", nil];
problemBx = [[NSArray alloc] initWithObjects:@"Slap",@"Spit",@"Bite",@"Pinch",@"Threat", nil];
conSequence= [[NSArray alloc] initWithObjects:@"Attention",@"Ignored",@"Escape",@"Tangible",@"Redirected", nil];
[super viewDidLoad];
}
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
return componentCount;
}
//The layout of the picker view has been outlined and app can interpret the code
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent: (NSInteger)component{
if (component==clientComponent){
return [clientName count];
}
if (component== bxComponent){
return [problemBx count];
}
if (component== antComponent){
return [anteCedent count];
}
if (component== conComponent){
return [conSequence count];
}
}
//Enables the app to correctly identify the number corresponding to each row
-(NSString *)pickerView:(UIPickerView*)pickerView titleForRow:(NSInteger)row forComponent: (NSInteger)component{
if (component==clientComponent){
return [clientName objectAtIndex:row];
}
if (component==bxComponent) {
return [problemBx objectAtIndex:row];
}
if (component==antComponent) {
return [anteCedent objectAtIndex:row];
}
if (component==conComponent){
return [conSequence objectAtIndex:row];
}
}
-(void)pickerView:(UIPickerView*)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger) component{
NSString *Clientmessage;
NSString *BXmessage;
NSString *anteMessage;
NSString *conMessage;
if (component==clientComponent){
Clientmessage=[[NSString alloc] initWithFormat:@"%@",[clientName objectAtIndex:row]];
lblClient.text=Clientmessage;
}
if (component==bxComponent){
BXmessage=[[NSString alloc] initWithFormat:@"%@",[clientName objectAtIndex:row]];
lblBX.text=BXmessage;
}
if (component==antComponent){
anteMessage=[[NSString alloc] initWithFormat:@"%@",[clientName objectAtIndex:row]];
lblAnte.text=anteMessage;
}
if (component==conComponent){
conMessage=[[NSString alloc] initWithFormat:@"%@",[clientName objectAtIndex:row]];
lblBX.text=conMessage;
}
}
//Set the time and date and adding information
-(IBAction)EnterSelection:(id)sender;{
NSString *totalSelection;
NSDate *date1 = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"];
NSString *myDate = [dateFormatter stringFromDate:date1];
totalSelection=[[NSString alloc] initWithFormat:dataView.text];
totalSelection=[totalSelection stringByAppendingString:@"\n"];
totalSelection=[totalSelection stringByAppendingString:lblClient.text];
totalSelection=[totalSelection stringByAppendingString:@","];
totalSelection=[totalSelection stringByAppendingString:lblAnte.text];
totalSelection=[totalSelection stringByAppendingString:@","];
totalSelection=[totalSelection stringByAppendingString:lblBX.text];
totalSelection=[totalSelection stringByAppendingString:@","];
totalSelection=[totalSelection stringByAppendingString:lblCon.text];
totalSelection=[totalSelection stringByAppendingString:@","];
totalSelection=[totalSelection stringByAppendingString:myDate];
dataView.text=totalSelection;
}
//sets the code that will automatically enetered as the recipient of the email
-(void) send:(id) sender{
txtTo=@"YourEmail@yahoo.com";
txtSubject=@"ABC Data";
[self sendEmailTo:txtTo withSubject:txtSubject withBody:[dataView text]];
}
//Organizes all email info and calls up mail function of iPhone
-(void) sendEmailTo: (NSString*)to withSubject:(NSString*)subject withBody:(NSString*)body {
txtTo=@"YourEmail@yahoo.com";
txtSubject=@"ABC Data";
NSString *mailString= [NSString stringWithFormat:@"mailto:ff?to=%@&subject=%@&body=%@",
[to stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding],
[subject stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding],
[body stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:mailString]];
}
// Do any additional setup after loading the view, typically from a nib.
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
答案 0 :(得分:4)
如果dataView.text
包含%
怎么办?然后initWithFormat:
会将其解释为格式规范的开头,并且(可能)尝试查看您未在消息中传递的参数。您可能会崩溃或损坏数据。这种类型的bug是如此常见和严重,以至于编译器被编程为检测风险并警告你。
由于您不想将dataView.text
用作格式字符串,因此请勿将其传递给initWithFormat:
。这条线会更好地写成:
totalSelection = [dataView.text copy];
你甚至可以像这样重写整个字符串附加部分:
totalSelection = [dataView.text stringByAppendingString:@"\n"];
NSString *fields = [@[
lblClient.text, lblAnte.text, lblBX.text, lblCon.text, myDate
] componentsJoinedByString:@","];
totalSelection = [totalSelection stringByAppendingString:fields];
答案 1 :(得分:-1)
试试这个。 initWithFormat:@“%@”将忽略任何格式。
//Set the time and date and adding information
-(IBAction)EnterSelection:(id)sender;{
NSString *totalSelection = [[NSString alloc] initWithFormat:@"%@", dataView.text];
NSDate *date1 = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"];
NSString *myDate = [dateFormatter stringFromDate:date1];
totalSelection=[totalSelection stringByAppendingString:@"\n"];
totalSelection=[totalSelection stringByAppendingString:lblClient.text];
totalSelection=[totalSelection stringByAppendingString:@","];
totalSelection=[totalSelection stringByAppendingString:lblAnte.text];
totalSelection=[totalSelection stringByAppendingString:@","];
totalSelection=[totalSelection stringByAppendingString:lblBX.text];
totalSelection=[totalSelection stringByAppendingString:@","];
totalSelection=[totalSelection stringByAppendingString:lblCon.text];
totalSelection=[totalSelection stringByAppendingString:@","];
totalSelection=[totalSelection stringByAppendingString:myDate];
dataView.text=totalSelection;
}