我收到错误错误类型参数一元减号和预期';'在 ':' 标记之前

Posted

技术标签:

【中文标题】我收到错误错误类型参数一元减号和预期\';\'在 \':\' 标记之前【英文标题】:I am getting the error Wrong type argument to unary minus and Expected ';' before ':' token我收到错误错误类型参数一元减号和预期';'在 ':' 标记之前 【发布时间】:2010-04-15 04:18:27 【问题描述】:

我收到错误错误类型参数一元减号和预期';'在 ':' 标记之前

错误发生在 - (NSIndexPath *).... 行

我在这方面真的很新,所以如果需要更多信息,请询问,如果您需要查看整个应用程序,请给我发电子邮件 @james at Sevenotwo dot com。该应用程序并不复杂。它基于 Apple 网站上的 iphonedatacorerecipes 代码示例代码。

#pragma mark -
#pragma mark Editing rows

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath 
 NSIndexPath *rowToSelect = indexPath;
    NSInteger section = indexPath.section;
    BOOL isEditing = self.editing;

    // If editing, don't allow notes to be selected
    // Not editing: Only allow notes to be selected
    if ((isEditing && section == NOTES_SECTION) || (!isEditing && section != NOTES_SECTION)) 
        [tableView deselectRowAtIndexPath:indexPath animated:YES];
        rowToSelect = nil;    
    

 return rowToSelect;



- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

    NSInteger section = indexPath.section;
    UIViewController *nextViewController = nil;

    /*
     What to do on selection depends on what section the row is in.
     For Type, Notes, and Instruments, create and push a new view controller of the type appropriate for the next screen.
     */
    switch (section) 
        case TYPE_SECTION:
            nextViewController = [[TypeSelectionViewController alloc] initWithStyle:UITableViewStyleGrouped];
            ((TypeSelectionViewController *)nextViewController).doctor = doctor;
            break;

        case NOTES_SECTION:
            nextViewController = [[NotesViewController alloc] initWithNibName:@"NotesView" bundle:nil];
            ((NotesViewController *)nextViewController).doctor = doctor;
            break;

        case INSTRUMENTS_SECTION:
            nextViewController = [[InstrumentDetailViewController alloc] initWithStyle:UITableViewStyleGrouped];
            ((InstrumentDetailViewController *)nextViewController).doctor = doctor;

            if (indexPath.row < [doctor.instruments count]) 
                Instrument *instrument = [instruments objectAtIndex:indexPath.row];
                ((InstrumentDetailViewController *)nextViewController).instrument = instrument;
            
            break;

        default:
            break;
    

    // If we got a new view controller, push it .
    if (nextViewController) 
        [self.navigationController pushViewController:nextViewController animated:YES];
        [nextViewController release];
    



- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath 
 UITableViewCellEditingStyle style = UITableViewCellEditingStyleNone;
    // Only allow editing in the instruments section.
    // In the instruments section, the last row (row number equal to the count of instruments) is added automatically (see tableView:cellForRowAtIndexPath:) to provide an insertion cell, so configure that cell for insertion; the other cells are configured for deletion.
    if (indexPath.section == INSTRUMENTS_SECTION) 
        // If this is the last item, it's the insertion row.
        if (indexPath.row == [doctor.instruments count]) 
            style = UITableViewCellEditingStyleInsert;
        
        else 
            style = UITableViewCellEditingStyleDelete;
        
    

    return style;



- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 

    // Only allow deletion, and only in the instruments section
    if ((editingStyle == UITableViewCellEditingStyleDelete) && (indexPath.section == INSTRUMENTS_SECTION)) 
        // Remove the corresponding instrument object from the doctor's instrument list and delete the appropriate table view cell.
        Instrument *instrument = [instruments objectAtIndex:indexPath.row];
        [doctor removeInstrumentsObject:instrument];
        [instruments removeObject:instrument];

        NSManagedObjectContext *context = instrument.managedObjectContext;
        [context deleteObject:instrument];

        [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationTop];
    

【问题讨论】:

通常这意味着你忘记了一个';'某处。 ...并寻找丢失的 ';' 你得到错误的那一行之前。 您需要在发布内容之前发布这些行。 @David 感谢您的编辑,代码要了我的命 :) 这个文件叫什么名字? 【参考方案1】:

当编译器到达- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath 时,它认为它仍在前一个方法的定义中。这就是为什么它试图将 - 视为一元减号而不是新方法定义的开始。

这意味着您在发布的代码上方的某处缺少 —— 可能在之前的方法定义中。

【讨论】:

【参考方案2】:

尝试使用代码折叠来查找丢失的花括号:- 右键单击包含 XCODE 错误的代码文件,然后选择 代码折叠->折叠方法/函数选项 或者 快捷键:-按 Control + Command + 向上箭头键

【讨论】:

以上是关于我收到错误错误类型参数一元减号和预期';'在 ':' 标记之前的主要内容,如果未能解决你的问题,请参考以下文章

错误:无法将类型“(_)->()”的值转换为预期的参数类型“(()-> Void)?”

错误:一元'*'的无效类型参数(有'int')

我收到错误 array_merge 预期参数 2 在 laravel 8 工厂?

创建Salesforce自定义公式字段 - (错误参数类型错误)

c#类型标识符存在,但我仍然收到预期的错误[关闭]

graphQL查询:收到错误“类型的预期值......,找到......”