2013-05-29 110 views
0

说有totalSelection = [[NSString alloc] initWithFormat:dataView.text]的行上有错误;并且错误表示Format字符串不是字面的,这是什么意思?格式化字符串不是字符串文字

- (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{ 
    [email protected]"[email protected]"; 
    [email protected]"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 { 
    [email protected]"[email protected]"; 
    [email protected]"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

将“YYYY-MM-dd”更改为“yyyy-MM-dd”以避免在新的一年中显示错误的年份。 – Hafthor

回答

4

如果dataView.text包含%?然后initWithFormat:会将其解释为格式规范的开始,并且(可能)尝试查看您未在消息中传递的参数。您可能会崩溃或损坏数据。这种类型的错误非常常见且严重,编译器被编程为检测风险并警告您。

由于您不想将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]; 
+0

将代码更改为该代码并运行模拟器之后,它会在应用程序的最后为每个选择器列重复进行数据选择。 – Ryanasto1

+0

我不明白“它只是在应用程序结束时为每个数据选择重复每个选择器列。” –

+0

我无法发布模拟器b/c的屏幕截图我没有足够的声望,但我正在说话关于数据部分(在底部),客户应该说鲍勃,皮特应该说独自,埃里克应该说吐,结果应该说Esc ...他们应该对应每个点击者列。它没有提供正确的信息@robmayoff – Ryanasto1

-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; 
}