DADataTable
Overview
DADataTable is one of the core classes in Data Abstract, and used to represent the client version of an individual record set, or data table, that has been retrieved from the server.
A DADataTable contains an array of rows containing the actual data, and also maintains information about any changes that may have been made to these rows locally, but that have not yet been sent back to the server. Each row is represented by a DADataTableRow instance, and contains data as specified by a list of DAFieldDefinitions. Fields can either be real
fields, for which the data is contained within the table itself, or Calculated and Lookup Fields, where the value is determined at runtime, when needed.
The individual rows in the table can be accessed as an NSArray of DADataTableRows using the rows
property, or the overload rowsFilteredUsingPredicate:, rowsSortedByField:ascending: and rowsFilteredUsingPredicate:sortedByField:ascending: methods. The latter three return a copy of the list of rows matching the specific criteria.
The process of locating specific rows can be sped up using DAIndexes, which can be accessed using the indecForField: and related methods, and will maintain a pre-cached index that makes field lookups faster. Indexes are also used extensively internally in the Data Abstract, for example to implement Lookup Fields.
When working with an NSPredicateEditor to provide filtering options to the user (either for local filtering using rowsFilteredUsingPredicate: or for data retrieval using Dynamic Where), the defaultPredicateEditorRowTemplates method can be used to obtain a preconfigured list of NSPredicateEditorRowTemplates for the table (Mac only, as NSPredicateEditor is not available on the iPhone). See Working with NSPredicateEditor and the Filters Sample for more details on this.
Read more about the Data Tables at Remote Data Adapter and Data Tables (Xcode).
Tasks
Accessing and working with Rows
- rowCount
- rows
- rowsFilteredUsingPredicate:
- rowsFilteredUsingPredicate:sortedByField:ascending:
- rowsSortedByField:ascending:
- rowAtIndex:
- addNewRow
- removeRow:
- removeRowAtIndex:
Accessing Fields
- fieldCount
- fields
- fieldByName:
- keyFields
- loggedFields
- realFields
- addCalculatedField:
- addCalculatedFieldName:dataType:target:selector:
- addCalculatedFieldName:dataType:target:selector:cached:
- addLookupField:
- addLookupFieldName:sourceField:lookupTable:lookupKeyField:lookupResultField:
Changes
- hasChanges
- changedRows
- cancelAllChanges
- cancelChangesForRow:
Editing Mode
- addNewRowInEditMode:
- addNewRowWithDataFromDictionary:inEditMode:
- postAll
- discardAll
Indexes
- indexForField:
- buildIndexForField:
- dropIndexForField:
Partitioning
*rowsPartitionedByField: *rowsPartitionedByField:includeNull:
Location
- Reference: DADataTable.h
- Namespace: DataAbstract
- Ancestry: NSObject | DADataTable
addCalculatedField:
Adds a new calculated field to the table. Please refer to the documentation for DACalculatedFieldDefinition for more details.
- (void) addCalculatedField:(DACalculatedFieldDefinition *)field
Parameters:
- field: DACalculatedFieldDefinition instance we want to add to given DADataTable
addCalculatedFieldName:dataType:target:selector:
Creates and adds a new calculated field to the table. Please refer to the documentation of DACalculatedFieldDefinition for more details.
- (DACalculatedFieldDefinition *) addCalculatedFieldName:(NSString *)name dataType:(enum DADataType)dataType target:(id)target selector:(SEL)selector
Parameters:
- name: The unique name for the new calculated field.
- dataType: The DADataType of the calculated field.
- target: Reference to the object that will provide the method for calculating this field.
- selector: Selector of method on the
target
that will calculate the field.
addCalculatedFieldName:dataType:target:selector:cached:
Adds a new usual or cached calculated field to the table. Please refer to the documentation for DACalculatedFieldDefinition for more details.
- (DACalculatedFieldDefinition *) addCalculatedFieldName:(NSString *)fieldName dataType:(enum DADataType)dataType target:(id)target selector:(SEL)selector cached:(BOOL)cached
Parameters:
- fieldName: The unique name for the new calculated field.
- dataType: The DADataType of the calculated field.
- target: Reference to the object that will provide the method for calculating this field.
- selector: Selector of method on the
target
that will calculate the field. - cached: Boolean flag. If YES then new cached calculated field will be added to the table. Please refer to the documentation for DACachedCalculatedFieldDefinition for more details.
addFieldWithName:
- (DAFieldDefinition *) addFieldWithName:(NSString *)name
Parameters:
- name:
addInternalFieldWithName:
- (DAInternalFieldDefinition *) addInternalFieldWithName:(NSString *)fieldName
Parameters:
- fieldName:
addLookupField:
Adds lookup field definition to the table. Please refer to the documentation for DALookupFieldDefinition for more details.
- (void) addLookupField:(DALookupFieldDefinition *)field
Parameters:
- field: DACalculatedFieldDefinition instance we want to add to given DADataTable
addLookupFieldName:sourceField:lookupTable:lookupKeyField:lookupResultField:
Creates and appends a lookup field to the table. Please refer to the documentation for DALookupFieldDefinition for more details.
- (DALookupFieldDefinition *) addLookupFieldName:(NSString *)name sourceField:(DAFieldDefinition *)sourceField lookupTable:(DADataTable *)lookupTable lookupKeyField:(DAFieldDefinition *)lookupKeyField lookupResultField:(DAFieldDefinition *)lookupResultField
Parameters:
- name: The unique name for the new calculated field.
- sourceField: Initializes the
sourceField
property. - lookupTable: Initializes the
lookupTable
property. - lookupKeyField: Initializes the
lookupKeyField
property. - lookupResultField: Initializes the
lookupResultField
property.
addNewRow
Appends a new row to the table. If the row has any AutoInc columns, new negative ID values will be generated automatically for these.
All other columns will be initialized as null
. A reference to the newly added row will be returned to the caller.
This method triggers the 'TableChanged' notification for the DADataTable.
- (DADataTableRow *) addNewRow
addNewRowInEditMode:
Adds a new row for the table.
- (DADataTableRow *) addNewRowInEditMode:(BOOL)editMode
Parameters:
- editMode: When YES then new row will be added in
edit mode
. Edit mode is different from the usual mode so that all changes are not visible for the table until they will be fixed bypost
method or cancelled bydiscard
method.
addNewRowWithDataFromArray:inEditMode:
- (DADataTableRow *) addNewRowWithDataFromArray:(NSArray *)data inEditMode:(BOOL)editMode
Parameters:
- data:
- editMode:
addNewRowWithDataFromDictionary:inEditMode:
method which allows adding new row with the data from the dictionary in one go. If your table has an autoincrement key field then just omit passing its temporary value in the dictionary. It will be generated automatically by library (otherwize it will throw an exception saying that you cannot specify custom value for autoincrement field.) Also, you don’t need to pass values for ALL fields. You can specify there only ones you need. It also can be quite convenient for setting default values for the row.
- (DADataTableRow *) addNewRowWithDataFromDictionary:(NSDictionary *)data inEditMode:(BOOL)editMode
Parameters:
- data: Dictionary with data for new row
- editMode: boolean flag which specify do we create new row in EditMode or not
addRowToChangedList:
- (void) addRowToChangedList:(DADataTableRow *)changedRow
Parameters:
- changedRow:
addRowToEditedList:
- (void) addRowToEditedList:(DADataTableRow *)row
Parameters:
- row:
appendTable:
Appends all rows from given table.
Finally fires DA_NOTIFICATION_TABLE_CHANGED
and DA_NOTIFICATION_TABLE_INDEX_MUST_UPDATE
events.
- (void) appendTable:(DADataTable *)newTable
Parameters:
- newTable: table whose rows will be appended to the current table.
buildIndexForField:
Creates a new DAIndex for the specified field, if none was created before, and returns a reference to the caller. In contrast to indexForField:
, the created index will be persisted for future use. It can be removed later, for example to conserve memory, by calling dropIndexForField:
.
- (DAIndex *) buildIndexForField:(NSString *)indexField
Parameters:
- indexField: Name of the field in given DADataTable for which we want to build DAIndex
busy
Boolean flag, when it is YES then whole table is in busy mode and any changes can be done here. This usually happens when a table is serialized into a briefcase or creates a delta with changes based on current data table.
@property (readonly) BOOL busy
cancelAllChanges
Cancels all changes in the table. Each row in [table changedRows] will be sent a cancelChangesForRow
message.
- (void) cancelAllChanges
cancelChangeForRow:
Cancels changes for given row. If row was added then this method will remove it. If row was deleted then this method will restore it.
- (void) cancelChangeForRow:(DADataTableRow *)row
Parameters:
- row: Row which changes should be canceled.
cancelChangesForRow:
Cancels changes in a specified row. Deprecated, please use cancelChangeForRow:
method instead.
- (void) cancelChangesForRow:(DADataTableRow *)row
Parameters:
- row: DACalculatedFieldDefinition instance for which we want to cancel changes
changedRows
@property (readonly) NSArray_DataTableRow *changedRows
defaultPredicateEditorRowTemplates
Returns a set of default NSPredicateEditorRowTemplates that can be used to let the user define a custom filter based on the fields in the table. Lookup fields will be handled automatically by these templates, to provide popup buttons for all valid lookup values. See also Working with NSPredicateEditor (Xcode) and the Filters sample.
- (NSArray *) defaultPredicateEditorRowTemplates
discardAll
This method discards all changes for the table that was made in edit mode and restores the original values. Finally method turns off edit mode for rows in the table.
- (void) discardAll
dropIndexForField:
Removes an index that was previously created through buildIndexForField:
.
- (void) dropIndexForField:(NSString *)indexField
Parameters:
- indexField:
fieldByName:
Returns the DAFieldDefinition for the field with the given name.
- (DAFieldDefinition *) fieldByName:(NSString *)name
Parameters:
- name: Name of the field to obtain the DAFieldDefinition for.
fieldByPosition:
- (DAFieldDefinition *) fieldByPosition:(NSUInteger)aPos
Parameters:
- aPos:
fieldCount
@property (readonly) NSInteger fieldCount
fields
@property (readonly) NSArray_FieldDefinition *fields
filterUsingPredicate:
Applies a predicate condition to filter the rows in the table. In contrast to rowsFilteredUsingPredicate*
, which returns a new filtered array of rows, this method will filter the actual list of rows in the table; all rows not matching the predicate will be discarded from the DADataTable, any pending changes in those rows will be lost.
Use this method if you want to permanently reduce the number of rows maintained by your client application. Use rowsFilteredUsingPredicate*
, instead, if you merely want to temporarily work with a reduced subset of the rows, for example for display in a view.
This method triggers the 'TableChanged' notification for the DADataTable.
- (void) filterUsingPredicate:(NSPredicate *)predicate
Parameters:
- predicate:
getPersistentFields
- (NSArray *) getPersistentFields
getRowWithData:
Builds and returns DADataTableRow instance from given array of the values.
- (DADataTableRow *) getRowWithData:(NSArray *)data
Parameters:
- data: array of the data for new row.
hasChanges
Returns whether the table contains any rows with open changes (YES
) or not (NO
). This is equivalent to [changedRows count] > 0.
@property (readonly) BOOL hasChanges
indexForField:
Returns a DAIndex for the specified field. If no index was created before by calling buildIndexForField:
, a new index will be created and returned; this newly created index will not be cached for future use.
Use this method to create and obtain a temporary index that can be discarded after use, or to obtain an index previously created through buildIndexForField:
.
- (DAIndex *) indexForField:(NSString *)indexField
Parameters:
- indexField: Name of the field for which we are obtaining index
init
- (InstanceType) init
initWithSchemaTable:
- (InstanceType) initWithSchemaTable:(DASchemaDataTable *)schemaTable
Parameters:
- schemaTable:
keyFields
@property (readonly) NSArray_FieldDefinition *keyFields
lock
Locks the table to avoid triggering 'TableChanged' notifications. This can be helpful when a lot of changes will be made to the table at once, but observers that track changes are listening to 'TableChanged' notifications. If data was changed while the table was in locked state, a single 'TableChanged' notification will be fired after the table is unlock
ed.
- (void) lock
loggedFields
@property (readonly) NSArray_FieldDefinition *loggedFields
mergeChangesForAllRows
- (void) mergeChangesForAllRows
mergeChangesForRow:
- (void) mergeChangesForRow:(DADataTableRow *)aRow
Parameters:
- aRow:
mergeTable:withPrimaryKey:
Updates the current table with data from the passed, based on a single primary key (PK) field. By comparing values for the key field, the method tries to locate the same row in the destination table and replace it, if found. If not found, the row will be added as new to the destination table. This method does not delete any rows.
It is assumed that both tables have the same structure.
- (void) mergeTable:(DADataTable *)newTable withPrimaryKey:(NSString *)PK
Parameters:
- newTable: The DADataTable to merge into the current table.
- PK: primary keys column name.
mergeTable:withPrimaryKeys:
Updates the current table with data from the passed, based on a list of several primary key (PK) fields. By comparing values for the key fields, the method tries to locate the same row in the destination table and replace it, if found. If not found, the row will be added as new to the destination table. This method does not delete any rows.
It is assumed that both tables have the same structure structure.
- (void) mergeTable:(DADataTable *)newTable withPrimaryKeys:(NSArray *)PKs
Parameters:
- newTable: The DADataTable to merge into the current table.
- PKs: Array of primary keys column names.
name
Specifies the name of the table.
@property (readonly) NSString *name
postAll
Confirms and fixes all changes in the table made in edit mode
- (void) postAll
predicateEditorRowTemplatesForFieldName:
Returns a set of default NSPredicateEditorRowTemplates that can be used to let the user define a custom filter based on a single field in the table. See also defaultPredicateEditorRowTemplates.
- (NSArray *) predicateEditorRowTemplatesForFieldName:(NSString *)field
Parameters:
- field: Field name for which we are getting templates
processDelta:andMergeChanges:
Method merges the changes from given delta with the table.
- (void) processDelta:(DADelta *)delta andMergeChanges:(BOOL)applyChanges
Parameters:
- delta: delta with changes we need to merge into the table
- applyChanges: boolean flag, if YES then changes will be committed in the table (i.e. table will not have pending changes)
realFields
@property (readonly) NSArray_FieldDefinition *realFields
registerRowClass:forTableName:
+ (void) registerRowClass:(Class)class forTableName:(NSString *)name
Parameters:
- class:
- name:
removeRow:
Removes a specified row from the table and adds it to changedRows
list, so it will be deleted
on the server when applying changes.
- (void) removeRow:(DADataTableRow *)row
Parameters:
- row:
removeRowAtIndex:
Removes a row at a specified index from the table and adds it to the changedRows
list, so it will be deleted
on the server when applying changes.
- (void) removeRowAtIndex:(NSUInteger)index
Parameters:
- index: index of the row we want to remove
removeRowFromChangedList:
- (void) removeRowFromChangedList:(DADataTableRow *)row
Parameters:
- row:
removeRowFromEditedList:
- (void) removeRowFromEditedList:(DADataTableRow *)row
Parameters:
- row:
replaceRowsWithDataFromTable:
Replaces all rows in the table with all rows from given table.
- (void) replaceRowsWithDataFromTable:(DADataTable *)newTable
Parameters:
- newTable: source table
rowAtIndex:
- (DADataTableRow *) rowAtIndex:(NSInteger)aRow
Parameters:
- aRow:
rowChanged:
- (void) rowChanged:(DADataTableRow *)row
Parameters:
- row:
rowChanged:forFieldPosition:
- (void) rowChanged:(DADataTableRow *)row forFieldPosition:(NSInteger)fieldPositions
Parameters:
- row:
- fieldPositions:
rowClass
@property (readonly) Class rowClass
rowCount
@property (readonly) NSInteger rowCount
rows
@property (readonly) NSArray_DataTableRow *rows
rowsFilteredUsingPredicate:
Returns a new array with a subset of of rows filtered according to the predicate.
- (NSArray *) rowsFilteredUsingPredicate:(NSPredicate *)predicate
Parameters:
- predicate: Predicate to use for filtering.
rowsFilteredUsingPredicate:localizedCaseInsensitivelySortedByField:ascending:
Returns a new array with a subset of of rows filtered according to the predicate and also sorted by given field using localizedCaseInsensitiveCompare:
selector.
- (NSArray *) rowsFilteredUsingPredicate:(NSPredicate *)predicate localizedCaseInsensitivelySortedByField:(NSString *)sortField ascending:(BOOL)ascending
Parameters:
- predicate: Predicate to use for filtering.
- sortField: Name of the field for sorting result set.
- ascending: Boolean flag specifies sorting mode.
rowsFilteredUsingPredicate:sortedByField:ascending:
Returns a new array with a subset of of rows filtered according to the predicate, and also sorted by the specified field.
- (NSArray *) rowsFilteredUsingPredicate:(NSPredicate *)predicate sortedByField:(NSString *)sortField ascending:(BOOL)ascending
Parameters:
- predicate: Predicate to use for filtering.
- sortField: FieldName to use for sorting.
- ascending: YES if ascending and NO if descending.
rowsFinderStyleSortedByField:ascending:
Method returns a new array that lists rows sorted by given field in "Finder style". "Finder style" here means case insencetive with proper strings and numbers comparison - like in OS X Finder application.
- (NSArray *) rowsFinderStyleSortedByField:(NSString *)sortField ascending:(BOOL)ascending
Parameters:
- sortField: Name of the field that should be used for sorting
- ascending: Boolean flag, when YES then result array will be sorted in ascending way. When NO then in descending way.
rowsLocalizedCaseInsensitivelySortedByField:ascending:
Method returns a new array that lists rows sorted by given field in the localized case insensetive way.
- (NSArray *) rowsLocalizedCaseInsensitivelySortedByField:(NSString *)sortField ascending:(BOOL)ascending
Parameters:
- sortField: Name of the field that should be used for sorting
- ascending: Boolean flag, when YES then result array will be sorted in ascending way. When NO then in descending way.
rowsPartitionedByField:
Returns a dictionary with rows where dictionary key is the value of the given field.
- (NSDictionary *) rowsPartitionedByField:(NSString *)fieldName
Parameters:
- fieldName: name of the grouping field.
rowsPartitionedByField:includeNull:
Returns a dictionary with rows where dictionary key is the value of the given field.
- (NSDictionary *) rowsPartitionedByField:(NSString *)fieldName includeNull:(BOOL)includeNull
Parameters:
- fieldName: Name of the field on which we need to group rows
- includeNull: If YES then for Null values it creates null value group
rowsPartitionedByField:includeNull:sortedByField:ascending:
Returns a dictionary with rows grouped by values of given field. Where grouping value is the key of the dictonary.
- (NSDictionary *) rowsPartitionedByField:(NSString *)fieldName includeNull:(BOOL)includeNull sortedByField:(NSString *)sortfield ascending:(BOOL)ascending
Parameters:
- fieldName: Name of the field on which we need to group rows
- includeNull: If YES then it creates null value group for Null values of given field
- sortfield: Name of the field on which we want to sort result rows
- ascending: Boolean flag, when YES then grouped rows in dictionary will be sorted in ascending way. When NO then in descending way.
rowsSortedByField:ascending:
Returns a new array with all rows in the table, sorted by the specified field.
- (NSArray *) rowsSortedByField:(NSString *)sortField ascending:(BOOL)ascending
Parameters:
- sortField: Name of the field on which we want to sort result rows
- ascending: Boolean flag, when YES then grouped rows in dictionary will be sorted in ascending way. When NO then in descending way.
setBusy:
- (void) setBusy:(BOOL)value
Parameters:
- value:
setName:
- (void) setName:(NSString *)aName
Parameters:
- aName:
setRows:
- (void) setRows:(NSMutableArray *)newRows
Parameters:
- newRows:
setupRealFields:
- (void) setupRealFields:(NSMutableArray *)aFields
Parameters:
- aFields:
setupSchemaWithFields:andParams:
- (void) setupSchemaWithFields:(NSMutableArray *)aFields andParams:(NSMutableArray *)aParams
Parameters:
- aFields:
- aParams:
setValue:forRow:position:
- (void) setValue:(id)aValue forRow:(NSUInteger)rowIndex position:(NSUInteger)fieldIndex
Parameters:
- aValue:
- rowIndex:
- fieldIndex:
triggerTableChangedNotification
- (void) triggerTableChangedNotification
triggerTableChangedNotificationForField:
- (void) triggerTableChangedNotificationForField:(DAFieldDefinition *)field
Parameters:
- field:
unlock
Unlocks the table to allow triggering 'TableChanged' notifications. If data was changed while the table was in locked state, a single 'TableChanged' notification will be fired when the table gets unlocked.
- (void) unlock
useFullDelta assign
@property (assign) BOOL useFullDelta
validateNewRowData:
- (void) validateNewRowData:(NSDictionary *)data
Parameters:
- data:
valueForRow:position:
- (id) valueForRow:(DADataTableRow *)row position:(NSUInteger)fieldIndex
Parameters:
- row:
- fieldIndex:
valueForRowAtIndex:position:
- (id) valueForRowAtIndex:(NSUInteger)rowIndex position:(NSUInteger)fieldIndex
Parameters:
- rowIndex:
- fieldIndex:
busy
Boolean flag, when it is YES then whole table is in busy mode and any changes can be done here. This usually happens when a table is serialized into a briefcase or creates a delta with changes based on current data table.
@property (readonly) BOOL busy
changedRows
@property (readonly) NSArray_DataTableRow *changedRows
fieldCount
@property (readonly) NSInteger fieldCount
fields
@property (readonly) NSArray_FieldDefinition *fields
hasChanges
Returns whether the table contains any rows with open changes (YES
) or not (NO
). This is equivalent to [changedRows count] > 0.
@property (readonly) BOOL hasChanges
keyFields
@property (readonly) NSArray_FieldDefinition *keyFields
loggedFields
@property (readonly) NSArray_FieldDefinition *loggedFields
name
Specifies the name of the table.
@property (readonly) NSString *name
realFields
@property (readonly) NSArray_FieldDefinition *realFields
rowClass
@property (readonly) Class rowClass
rowCount
@property (readonly) NSInteger rowCount
rows
@property (readonly) NSArray_DataTableRow *rows
useFullDelta assign
@property (assign) BOOL useFullDelta
registerRowClass:forTableName:
+ (void) registerRowClass:(Class)class forTableName:(NSString *)name
Parameters:
- class:
- name:
addCalculatedField:
Adds a new calculated field to the table. Please refer to the documentation for DACalculatedFieldDefinition for more details.
- (void) addCalculatedField:(DACalculatedFieldDefinition *)field
Parameters:
- field: DACalculatedFieldDefinition instance we want to add to given DADataTable
addCalculatedFieldName:dataType:target:selector:
Creates and adds a new calculated field to the table. Please refer to the documentation of DACalculatedFieldDefinition for more details.
- (DACalculatedFieldDefinition *) addCalculatedFieldName:(NSString *)name dataType:(enum DADataType)dataType target:(id)target selector:(SEL)selector
Parameters:
- name: The unique name for the new calculated field.
- dataType: The DADataType of the calculated field.
- target: Reference to the object that will provide the method for calculating this field.
- selector: Selector of method on the
target
that will calculate the field.
addCalculatedFieldName:dataType:target:selector:cached:
Adds a new usual or cached calculated field to the table. Please refer to the documentation for DACalculatedFieldDefinition for more details.
- (DACalculatedFieldDefinition *) addCalculatedFieldName:(NSString *)fieldName dataType:(enum DADataType)dataType target:(id)target selector:(SEL)selector cached:(BOOL)cached
Parameters:
- fieldName: The unique name for the new calculated field.
- dataType: The DADataType of the calculated field.
- target: Reference to the object that will provide the method for calculating this field.
- selector: Selector of method on the
target
that will calculate the field. - cached: Boolean flag. If YES then new cached calculated field will be added to the table. Please refer to the documentation for DACachedCalculatedFieldDefinition for more details.
addFieldWithName:
- (DAFieldDefinition *) addFieldWithName:(NSString *)name
Parameters:
- name:
addInternalFieldWithName:
- (DAInternalFieldDefinition *) addInternalFieldWithName:(NSString *)fieldName
Parameters:
- fieldName:
addLookupField:
Adds lookup field definition to the table. Please refer to the documentation for DALookupFieldDefinition for more details.
- (void) addLookupField:(DALookupFieldDefinition *)field
Parameters:
- field: DACalculatedFieldDefinition instance we want to add to given DADataTable
addLookupFieldName:sourceField:lookupTable:lookupKeyField:lookupResultField:
Creates and appends a lookup field to the table. Please refer to the documentation for DALookupFieldDefinition for more details.
- (DALookupFieldDefinition *) addLookupFieldName:(NSString *)name sourceField:(DAFieldDefinition *)sourceField lookupTable:(DADataTable *)lookupTable lookupKeyField:(DAFieldDefinition *)lookupKeyField lookupResultField:(DAFieldDefinition *)lookupResultField
Parameters:
- name: The unique name for the new calculated field.
- sourceField: Initializes the
sourceField
property. - lookupTable: Initializes the
lookupTable
property. - lookupKeyField: Initializes the
lookupKeyField
property. - lookupResultField: Initializes the
lookupResultField
property.
addNewRow
Appends a new row to the table. If the row has any AutoInc columns, new negative ID values will be generated automatically for these.
All other columns will be initialized as null
. A reference to the newly added row will be returned to the caller.
This method triggers the 'TableChanged' notification for the DADataTable.
- (DADataTableRow *) addNewRow
addNewRowInEditMode:
Adds a new row for the table.
- (DADataTableRow *) addNewRowInEditMode:(BOOL)editMode
Parameters:
- editMode: When YES then new row will be added in
edit mode
. Edit mode is different from the usual mode so that all changes are not visible for the table until they will be fixed bypost
method or cancelled bydiscard
method.
addNewRowWithDataFromArray:inEditMode:
- (DADataTableRow *) addNewRowWithDataFromArray:(NSArray *)data inEditMode:(BOOL)editMode
Parameters:
- data:
- editMode:
addNewRowWithDataFromDictionary:inEditMode:
method which allows adding new row with the data from the dictionary in one go. If your table has an autoincrement key field then just omit passing its temporary value in the dictionary. It will be generated automatically by library (otherwize it will throw an exception saying that you cannot specify custom value for autoincrement field.) Also, you don’t need to pass values for ALL fields. You can specify there only ones you need. It also can be quite convenient for setting default values for the row.
- (DADataTableRow *) addNewRowWithDataFromDictionary:(NSDictionary *)data inEditMode:(BOOL)editMode
Parameters:
- data: Dictionary with data for new row
- editMode: boolean flag which specify do we create new row in EditMode or not
addRowToChangedList:
- (void) addRowToChangedList:(DADataTableRow *)changedRow
Parameters:
- changedRow:
addRowToEditedList:
- (void) addRowToEditedList:(DADataTableRow *)row
Parameters:
- row:
appendTable:
Appends all rows from given table.
Finally fires DA_NOTIFICATION_TABLE_CHANGED
and DA_NOTIFICATION_TABLE_INDEX_MUST_UPDATE
events.
- (void) appendTable:(DADataTable *)newTable
Parameters:
- newTable: table whose rows will be appended to the current table.
buildIndexForField:
Creates a new DAIndex for the specified field, if none was created before, and returns a reference to the caller. In contrast to indexForField:
, the created index will be persisted for future use. It can be removed later, for example to conserve memory, by calling dropIndexForField:
.
- (DAIndex *) buildIndexForField:(NSString *)indexField
Parameters:
- indexField: Name of the field in given DADataTable for which we want to build DAIndex
cancelAllChanges
Cancels all changes in the table. Each row in [table changedRows] will be sent a cancelChangesForRow
message.
- (void) cancelAllChanges
cancelChangeForRow:
Cancels changes for given row. If row was added then this method will remove it. If row was deleted then this method will restore it.
- (void) cancelChangeForRow:(DADataTableRow *)row
Parameters:
- row: Row which changes should be canceled.
cancelChangesForRow:
Cancels changes in a specified row. Deprecated, please use cancelChangeForRow:
method instead.
- (void) cancelChangesForRow:(DADataTableRow *)row
Parameters:
- row: DACalculatedFieldDefinition instance for which we want to cancel changes
defaultPredicateEditorRowTemplates
Returns a set of default NSPredicateEditorRowTemplates that can be used to let the user define a custom filter based on the fields in the table. Lookup fields will be handled automatically by these templates, to provide popup buttons for all valid lookup values. See also Working with NSPredicateEditor (Xcode) and the Filters sample.
- (NSArray *) defaultPredicateEditorRowTemplates
discardAll
This method discards all changes for the table that was made in edit mode and restores the original values. Finally method turns off edit mode for rows in the table.
- (void) discardAll
dropIndexForField:
Removes an index that was previously created through buildIndexForField:
.
- (void) dropIndexForField:(NSString *)indexField
Parameters:
- indexField:
fieldByName:
Returns the DAFieldDefinition for the field with the given name.
- (DAFieldDefinition *) fieldByName:(NSString *)name
Parameters:
- name: Name of the field to obtain the DAFieldDefinition for.
fieldByPosition:
- (DAFieldDefinition *) fieldByPosition:(NSUInteger)aPos
Parameters:
- aPos:
filterUsingPredicate:
Applies a predicate condition to filter the rows in the table. In contrast to rowsFilteredUsingPredicate*
, which returns a new filtered array of rows, this method will filter the actual list of rows in the table; all rows not matching the predicate will be discarded from the DADataTable, any pending changes in those rows will be lost.
Use this method if you want to permanently reduce the number of rows maintained by your client application. Use rowsFilteredUsingPredicate*
, instead, if you merely want to temporarily work with a reduced subset of the rows, for example for display in a view.
This method triggers the 'TableChanged' notification for the DADataTable.
- (void) filterUsingPredicate:(NSPredicate *)predicate
Parameters:
- predicate:
getPersistentFields
- (NSArray *) getPersistentFields
getRowWithData:
Builds and returns DADataTableRow instance from given array of the values.
- (DADataTableRow *) getRowWithData:(NSArray *)data
Parameters:
- data: array of the data for new row.
indexForField:
Returns a DAIndex for the specified field. If no index was created before by calling buildIndexForField:
, a new index will be created and returned; this newly created index will not be cached for future use.
Use this method to create and obtain a temporary index that can be discarded after use, or to obtain an index previously created through buildIndexForField:
.
- (DAIndex *) indexForField:(NSString *)indexField
Parameters:
- indexField: Name of the field for which we are obtaining index
init
- (InstanceType) init
initWithSchemaTable:
- (InstanceType) initWithSchemaTable:(DASchemaDataTable *)schemaTable
Parameters:
- schemaTable:
lock
Locks the table to avoid triggering 'TableChanged' notifications. This can be helpful when a lot of changes will be made to the table at once, but observers that track changes are listening to 'TableChanged' notifications. If data was changed while the table was in locked state, a single 'TableChanged' notification will be fired after the table is unlock
ed.
- (void) lock
mergeChangesForAllRows
- (void) mergeChangesForAllRows
mergeChangesForRow:
- (void) mergeChangesForRow:(DADataTableRow *)aRow
Parameters:
- aRow:
mergeTable:withPrimaryKey:
Updates the current table with data from the passed, based on a single primary key (PK) field. By comparing values for the key field, the method tries to locate the same row in the destination table and replace it, if found. If not found, the row will be added as new to the destination table. This method does not delete any rows.
It is assumed that both tables have the same structure.
- (void) mergeTable:(DADataTable *)newTable withPrimaryKey:(NSString *)PK
Parameters:
- newTable: The DADataTable to merge into the current table.
- PK: primary keys column name.
mergeTable:withPrimaryKeys:
Updates the current table with data from the passed, based on a list of several primary key (PK) fields. By comparing values for the key fields, the method tries to locate the same row in the destination table and replace it, if found. If not found, the row will be added as new to the destination table. This method does not delete any rows.
It is assumed that both tables have the same structure structure.
- (void) mergeTable:(DADataTable *)newTable withPrimaryKeys:(NSArray *)PKs
Parameters:
- newTable: The DADataTable to merge into the current table.
- PKs: Array of primary keys column names.
postAll
Confirms and fixes all changes in the table made in edit mode
- (void) postAll
predicateEditorRowTemplatesForFieldName:
Returns a set of default NSPredicateEditorRowTemplates that can be used to let the user define a custom filter based on a single field in the table. See also defaultPredicateEditorRowTemplates.
- (NSArray *) predicateEditorRowTemplatesForFieldName:(NSString *)field
Parameters:
- field: Field name for which we are getting templates
processDelta:andMergeChanges:
Method merges the changes from given delta with the table.
- (void) processDelta:(DADelta *)delta andMergeChanges:(BOOL)applyChanges
Parameters:
- delta: delta with changes we need to merge into the table
- applyChanges: boolean flag, if YES then changes will be committed in the table (i.e. table will not have pending changes)
removeRow:
Removes a specified row from the table and adds it to changedRows
list, so it will be deleted
on the server when applying changes.
- (void) removeRow:(DADataTableRow *)row
Parameters:
- row:
removeRowAtIndex:
Removes a row at a specified index from the table and adds it to the changedRows
list, so it will be deleted
on the server when applying changes.
- (void) removeRowAtIndex:(NSUInteger)index
Parameters:
- index: index of the row we want to remove
removeRowFromChangedList:
- (void) removeRowFromChangedList:(DADataTableRow *)row
Parameters:
- row:
removeRowFromEditedList:
- (void) removeRowFromEditedList:(DADataTableRow *)row
Parameters:
- row:
replaceRowsWithDataFromTable:
Replaces all rows in the table with all rows from given table.
- (void) replaceRowsWithDataFromTable:(DADataTable *)newTable
Parameters:
- newTable: source table
rowAtIndex:
- (DADataTableRow *) rowAtIndex:(NSInteger)aRow
Parameters:
- aRow:
rowChanged:
- (void) rowChanged:(DADataTableRow *)row
Parameters:
- row:
rowChanged:forFieldPosition:
- (void) rowChanged:(DADataTableRow *)row forFieldPosition:(NSInteger)fieldPositions
Parameters:
- row:
- fieldPositions:
rowsFilteredUsingPredicate:
Returns a new array with a subset of of rows filtered according to the predicate.
- (NSArray *) rowsFilteredUsingPredicate:(NSPredicate *)predicate
Parameters:
- predicate: Predicate to use for filtering.
rowsFilteredUsingPredicate:localizedCaseInsensitivelySortedByField:ascending:
Returns a new array with a subset of of rows filtered according to the predicate and also sorted by given field using localizedCaseInsensitiveCompare:
selector.
- (NSArray *) rowsFilteredUsingPredicate:(NSPredicate *)predicate localizedCaseInsensitivelySortedByField:(NSString *)sortField ascending:(BOOL)ascending
Parameters:
- predicate: Predicate to use for filtering.
- sortField: Name of the field for sorting result set.
- ascending: Boolean flag specifies sorting mode.
rowsFilteredUsingPredicate:sortedByField:ascending:
Returns a new array with a subset of of rows filtered according to the predicate, and also sorted by the specified field.
- (NSArray *) rowsFilteredUsingPredicate:(NSPredicate *)predicate sortedByField:(NSString *)sortField ascending:(BOOL)ascending
Parameters:
- predicate: Predicate to use for filtering.
- sortField: FieldName to use for sorting.
- ascending: YES if ascending and NO if descending.
rowsFinderStyleSortedByField:ascending:
Method returns a new array that lists rows sorted by given field in "Finder style". "Finder style" here means case insencetive with proper strings and numbers comparison - like in OS X Finder application.
- (NSArray *) rowsFinderStyleSortedByField:(NSString *)sortField ascending:(BOOL)ascending
Parameters:
- sortField: Name of the field that should be used for sorting
- ascending: Boolean flag, when YES then result array will be sorted in ascending way. When NO then in descending way.
rowsLocalizedCaseInsensitivelySortedByField:ascending:
Method returns a new array that lists rows sorted by given field in the localized case insensetive way.
- (NSArray *) rowsLocalizedCaseInsensitivelySortedByField:(NSString *)sortField ascending:(BOOL)ascending
Parameters:
- sortField: Name of the field that should be used for sorting
- ascending: Boolean flag, when YES then result array will be sorted in ascending way. When NO then in descending way.
rowsPartitionedByField:
Returns a dictionary with rows where dictionary key is the value of the given field.
- (NSDictionary *) rowsPartitionedByField:(NSString *)fieldName
Parameters:
- fieldName: name of the grouping field.
rowsPartitionedByField:includeNull:
Returns a dictionary with rows where dictionary key is the value of the given field.
- (NSDictionary *) rowsPartitionedByField:(NSString *)fieldName includeNull:(BOOL)includeNull
Parameters:
- fieldName: Name of the field on which we need to group rows
- includeNull: If YES then for Null values it creates null value group
rowsPartitionedByField:includeNull:sortedByField:ascending:
Returns a dictionary with rows grouped by values of given field. Where grouping value is the key of the dictonary.
- (NSDictionary *) rowsPartitionedByField:(NSString *)fieldName includeNull:(BOOL)includeNull sortedByField:(NSString *)sortfield ascending:(BOOL)ascending
Parameters:
- fieldName: Name of the field on which we need to group rows
- includeNull: If YES then it creates null value group for Null values of given field
- sortfield: Name of the field on which we want to sort result rows
- ascending: Boolean flag, when YES then grouped rows in dictionary will be sorted in ascending way. When NO then in descending way.
rowsSortedByField:ascending:
Returns a new array with all rows in the table, sorted by the specified field.
- (NSArray *) rowsSortedByField:(NSString *)sortField ascending:(BOOL)ascending
Parameters:
- sortField: Name of the field on which we want to sort result rows
- ascending: Boolean flag, when YES then grouped rows in dictionary will be sorted in ascending way. When NO then in descending way.
setBusy:
- (void) setBusy:(BOOL)value
Parameters:
- value:
setName:
- (void) setName:(NSString *)aName
Parameters:
- aName:
setRows:
- (void) setRows:(NSMutableArray *)newRows
Parameters:
- newRows:
setupRealFields:
- (void) setupRealFields:(NSMutableArray *)aFields
Parameters:
- aFields:
setupSchemaWithFields:andParams:
- (void) setupSchemaWithFields:(NSMutableArray *)aFields andParams:(NSMutableArray *)aParams
Parameters:
- aFields:
- aParams:
setValue:forRow:position:
- (void) setValue:(id)aValue forRow:(NSUInteger)rowIndex position:(NSUInteger)fieldIndex
Parameters:
- aValue:
- rowIndex:
- fieldIndex:
triggerTableChangedNotification
- (void) triggerTableChangedNotification
triggerTableChangedNotificationForField:
- (void) triggerTableChangedNotificationForField:(DAFieldDefinition *)field
Parameters:
- field:
unlock
Unlocks the table to allow triggering 'TableChanged' notifications. If data was changed while the table was in locked state, a single 'TableChanged' notification will be fired when the table gets unlocked.
- (void) unlock
validateNewRowData:
- (void) validateNewRowData:(NSDictionary *)data
Parameters:
- data:
valueForRow:position:
- (id) valueForRow:(DADataTableRow *)row position:(NSUInteger)fieldIndex
Parameters:
- row:
- fieldIndex:
valueForRowAtIndex:position:
- (id) valueForRowAtIndex:(NSUInteger)rowIndex position:(NSUInteger)fieldIndex
Parameters:
- rowIndex:
- fieldIndex: