Чем я должен заменить этот код? - PullRequest
0 голосов
/ 04 мая 2009

Недавно я получил пример кода от друга, но он сказал мне, что нужно изменить одну строку, чтобы она работала для меня. Вот код:

- (void)tableView:(NSTableView *)aTableView willDisplayCell:(id)aCell forTableColumn:

(NSTableColumn *)aTableColumn row:(int)rowIndex {

    if ([aCell respondsToSelector:@selector(setTextColor:)]) {

        if ([self visibilityForFile:[fileList objectAtIndex:rowIndex]] == NO) 

[aCell setTextColor:[NSColor lightGrayColor]];

        else [aCell setTextColor:[NSColor blackColor]];
    }
}

Мне нужно заменить эту строку:

[self visibilityForFile:[fileList objectAtIndex:rowIndex]] == NO

С некоторым другим кодом, что я на самом деле пытаюсь сделать, так как у меня есть таблица, у каждой строки в таблице есть флажок, когда флажок в строке проверяется, цвет текста этой строки изменится. Я думаю, что код должен проверить, чтобы увидеть, если флажок в строке отмечен, мне просто нужен код для этого.

Обновление

Это делегат для приложения (основные данные).

Заголовочный файл (.h):

#import <Cocoa/Cocoa.h>

@interface Spark_AppDelegate : NSObject 
{
    IBOutlet NSWindow *window;
    IBOutlet NSMenu *theMenu;

    NSPersistentStoreCoordinator *persistentStoreCoordinator;
    NSManagedObjectModel *managedObjectModel;
    NSManagedObjectContext *managedObjectContext;
}

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator;
- (NSManagedObjectModel *)managedObjectModel;
- (NSManagedObjectContext *)managedObjectContext;

- (IBAction)saveAction:sender;

@end

.M файл

/**
    Returns the support folder for the application, used to store the Core Data
    store file.  This code uses a folder named "Spark" for
    the content, either in the NSApplicationSupportDirectory location or (if the
    former cannot be found), the system's temporary directory.
 */

- (NSString *)applicationSupportFolder {

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
    NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : NSTemporaryDirectory();
    return [basePath stringByAppendingPathComponent:@"Spark"];
}


/**
    Creates, retains, and returns the managed object model for the application 
    by merging all of the models found in the application bundle.
 */

- (NSManagedObjectModel *)managedObjectModel {

    if (managedObjectModel != nil) {
        return managedObjectModel;
    }

    managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];    
    return managedObjectModel;
}


/**
    Returns the persistent store coordinator for the application.  This 
    implementation will create and return a coordinator, having added the 
    store for the application to it.  (The folder for the store is created, 
    if necessary.)
 */

- (NSPersistentStoreCoordinator *) persistentStoreCoordinator {

    if (persistentStoreCoordinator != nil) {
        return persistentStoreCoordinator;
    }

    NSFileManager *fileManager;
    NSString *applicationSupportFolder = nil;
    NSURL *url;
    NSError *error;

    fileManager = [NSFileManager defaultManager];
    applicationSupportFolder = [self applicationSupportFolder];
    if ( ![fileManager fileExistsAtPath:applicationSupportFolder isDirectory:NULL] ) {
        [fileManager createDirectoryAtPath:applicationSupportFolder attributes:nil];
    }

    url = [NSURL fileURLWithPath: [applicationSupportFolder stringByAppendingPathComponent: @"Spark.xml"]];
    persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];
    if (![persistentStoreCoordinator addPersistentStoreWithType:NSXMLStoreType configuration:nil URL:url options:nil error:&error]){
        [[NSApplication sharedApplication] presentError:error];
    }    

    return persistentStoreCoordinator;
}


/**
    Returns the managed object context for the application (which is already
    bound to the persistent store coordinator for the application.) 
 */

- (NSManagedObjectContext *) managedObjectContext {

    if (managedObjectContext != nil) {
        return managedObjectContext;
    }

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
    if (coordinator != nil) {
        managedObjectContext = [[NSManagedObjectContext alloc] init];
        [managedObjectContext setPersistentStoreCoordinator: coordinator];
    }

    return managedObjectContext;
}


/**
    Returns the NSUndoManager for the application.  In this case, the manager
    returned is that of the managed object context for the application.
 */

- (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window {
    return [[self managedObjectContext] undoManager];
}


/**
    Performs the save action for the application, which is to send the save:
    message to the application's managed object context.  Any encountered errors
    are presented to the user.
 */

- (IBAction) saveAction:(id)sender {

    NSError *error = nil;
    if (![[self managedObjectContext] save:&error]) {
        [[NSApplication sharedApplication] presentError:error];
    }
}


/**
    Implementation of the applicationShouldTerminate: method, used here to
    handle the saving of changes in the application managed object context
    before the application terminates.
 */

- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender {

    NSError *error;
    int reply = NSTerminateNow;

    if (managedObjectContext != nil) {
        if ([managedObjectContext commitEditing]) {
            if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {

                // This error handling simply presents error information in a panel with an 
                // "Ok" button, which does not include any attempt at error recovery (meaning, 
                // attempting to fix the error.)  As a result, this implementation will 
                // present the information to the user and then follow up with a panel asking 
                // if the user wishes to "Quit Anyway", without saving the changes.

                // Typically, this process should be altered to include application-specific 
                // recovery steps.  

                BOOL errorResult = [[NSApplication sharedApplication] presentError:error];

                if (errorResult == YES) {
                    reply = NSTerminateCancel;
                } 

                else {

                    int alertReturn = NSRunAlertPanel(nil, @"There Are Un-Saved Changes. Quit anyway?" , @"Quit anyway", @"Cancel", nil);
                    if (alertReturn == NSAlertAlternateReturn) {
                        reply = NSTerminateCancel;  
                    }
                }
            }
        } 

        else {
            reply = NSTerminateCancel;
        }
    }

    return reply;
}


/**
    Implementation of dealloc, to release the retained variables.
 */

- (void) dealloc {

    [managedObjectContext release], managedObjectContext = nil;
    [persistentStoreCoordinator release], persistentStoreCoordinator = nil;
    [managedObjectModel release], managedObjectModel = nil;
    [super dealloc];
}


@end

Ответы [ 3 ]

1 голос
/ 04 мая 2009

Вам нужно изменить оператор if, чтобы прочитать логическое значение, поддерживающее флажок для данной строки из вашей модели. Поскольку вы не включили информацию о своей модели, никто не сможет дать вам фактическую строку кода для использования.

Также не ясно, что остальная часть кода будет делать то, что вы хотите; он меняет цвет текста условно, а не саму строку.

1 голос
/ 04 мая 2009

Как правило, вы не хотите основывать отображение одной ячейки на значении другой. Более совместимый с MVC подход заключается в том, чтобы флажок управлял свойством объекта этой строки (скажем, isActive), что можно затем проверить в приведенном выше коде, чтобы решить, как рисовать текст. Пока состояние флажка и цвет текста основаны на одном и том же свойстве, они будут совпадать, как вы хотите.

Кроме того, вам нужен не [NSColor lightGrayColor], а [NSColor disabledControlTextColor]. И, как правило, вы просто хотите отключить всю ячейку, т.е. [aCell setEnabled:NO], а не просто менять цвет текста, что заставляет его действовать как отключенная ячейка, а также выглядеть как одна.

0 голосов
/ 04 мая 2009

Что возвращает [self visibilityForFile:]? Если это не BOOL, вам нужно изменить его на что-то, что возвращает BOOL. Почему бы вам не спросить своего друга, на что вы должны изменить линию?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...