0

単項マイナスと期待される ';' のエラー タイプ引数が間違っています。':' トークンの前

エラーは - (NSIndexPath *)... 行で発生します。

私はこれで本当に新しいので、必要な情報が他にある場合は、お尋ねください。アプリ全体を見る必要がある場合は、sevenotwo dot com の @ james にメールしてください。アプリはそれほど複雑ではありません。これは、Apple の Web サイトにある 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];
    }
}
4

2 に答える 2

2

コンパイラがに到達すると- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath、それはまだ前のメソッドの定義内にあると見なします。そのため、新しいメソッド定義の開始ではなく、単項マイナスとして処理しようとしています。

これは、投稿したコードのどこかに}がないことを意味します-おそらく前のメソッド定義にあります。

于 2010-04-15T05:12:30.753 に答える
0

コードの折りたたみを試して、不足している中括弧を見つけます:- XCODEでエラーを含むコード ファイルを右クリックし、[コードの折りたたみ] - > [方法/関数の折りたたみ]オプションまたはショートカット キーを選択 します: - Control + Command + 上向き矢印キーを押します

于 2012-03-10T10:06:59.893 に答える