2011-01-13 13 views
0

Kann jemand meinen Verdacht auf diese Codezeile bestätigen.Grund Ziel C Syntax Frage

NSUInteger newPath[] = {[indexPath section],0}; 

Ich bin mir ziemlich sicher, es ist ein C-Array von NSUIntegers. Habe ich Recht damit? Können Sie sogar C-Arrays von Objective-C-Objekten erstellen? Hier

ist der Code im Kontext:

-(UITableViewCellEditingStyle)tableView:(UITableView *) tableViewEditingStyleForRowAtIndexPath:(NSIndexPath*)indexPath{ 

if ([self isToManyRelationshipSection:[indexPath section]]) { 
    NSUInteger newPath[] = {[indexPath section],0}; 
    NSIndexPath *row0IndexPath = [NSIndexPath indexPathWithIndexes:newPath length:2]; 

    NSString *rowKey = [rowKeys nestedObjectAtIndexPath:row0IndexPath]; 
    NSString *rowLabel = [rowLabels nestedObjectAtIndexPath:row0IndexPath]; 
    NSMutableSet *rowSet = [managedObject mutableSetValueForKey:rowKey];//!!!: to-many? 
    NSArray *rowArray = [NSArray arrayByOrderingSet:rowSet byKey:rowLabel ascending:YES]; 

    if ([indexPath row] >= [rowArray count]) { 
     return UITableViewCellEditingStyleInsert; 
    } 

    return UITableViewCellEditingStyleDelete; 
} 
return UITableViewCellEditingStyleNone; 
+1

NSUInteger ist nicht ein Objekt, dessen AC-Typ, definiert sich hier: http://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_DataTypes /Reference/reference.html#//apple_ref/doc/uid/20000018-SW71 –

+0

Schön, das habe ich nicht bemerkt. Es ist also ein dynamischer Basistyp. "Beim Erstellen von 32-Bit-Anwendungen ist NSUInteger eine 32-Bit-Ganzzahl ohne Vorzeichen. Eine 64-Bit-Anwendung behandelt NSUInteger als 64-Bit-Ganzzahl ohne Vorzeichen." – Aaronium112

Antwort

3

Ja, Sie haben Recht. Allerdings ...

NSUInteger newPath[] = {[indexPath section],0}; 
NSIndexPath *row0IndexPath = [NSIndexPath indexPathWithIndexes:newPath length:2]; 

Ich würde stark entmutigen Sie von diesem Format ein NSIndexPath zu erstellen, die in einem UITableView zur bestimmungsgemäßen Verwendung ist. There's a convenience method to do thisviel einfacher:

NSIndexPath *row0IndexPath = [NSIndexPath indexPathForRow:0 inSection:[indexPath section]]; 
0

NSUInteger ist kein Objective-c-Objekt. Es ist ein typedef für eine Ganzzahl ohne Vorzeichen. Abhängig von Ihrer Plattform kann es int oder lang sein. Aber es ist kein Objekt. Sie haben also im Grunde nur ein c Array von Ints.

3

Ich bin mir ziemlich sicher, es ist ein C-Array von NSUIntegers. Habe ich Recht damit?

Ja, ist es sicher.

Können Sie sogar C-Arrays von Objective-C-Objekten erstellen?

Sie können. Zum Beispiel ist dies ein Array von zwei NSString *:

NSString *myStrings[] = {@"one", @"two"}; 

Ist das sinnvoll? Manchmal, aber es ist fast immer vorteilhaft, einen NSArray zu verwenden, wenn Sie ein Array von Objekten benötigen.

+0

Große Antwort. Vielen Dank. – Aaronium112

+0

@MakingScienceFictionFact Wenn es so eine großartige Antwort ist, dann schlage ich vor, dass Sie auf das Häkchen neben der Antwort klicken :) –