在基於導航的應用程序中,我希望能夠在我詳細的產品視圖中擁有「克隆」或「另存爲」按鈕,其中用戶可以從他們已經輸入的現有產品之一創建新產品。在應用程序中,產品有很多屬性字段供用戶輸入,所以我想爲用戶提供快速「克隆」或「另存爲」任何現有產品的功能,這些產品會自動複製將現有產品的屬性覆蓋到新產品上,並允許用戶輸入新產品的名稱並保存。「克隆」或「另存爲」現有產品中的新產品
任何幫助如何實現這一點將不勝感激。謝謝。
在基於導航的應用程序中,我希望能夠在我詳細的產品視圖中擁有「克隆」或「另存爲」按鈕,其中用戶可以從他們已經輸入的現有產品之一創建新產品。在應用程序中,產品有很多屬性字段供用戶輸入,所以我想爲用戶提供快速「克隆」或「另存爲」任何現有產品的功能,這些產品會自動複製將現有產品的屬性覆蓋到新產品上,並允許用戶輸入新產品的名稱並保存。「克隆」或「另存爲」現有產品中的新產品
任何幫助如何實現這一點將不勝感激。謝謝。
我假設你正在使用核心數據,但你沒有特別提到這一點。從你的問題的角度來看,這似乎是有道理的。
將屬性從一個對象複製到另一個對象可能會非常棘手。我推薦一本關於Marcus Zarra的Core Data的書。你可以在這裏找到它http://pragprog.com/titles/mzcd/core-data
在他的書中,除了在導入和導出數據的情況下,他通過這個場景來貫穿整個場景,但代碼應該是類似的。以下是他的書籍站點提供的一些代碼(上圖)。這將所有屬性(包括關係)從一個對象複製到另一個對象。您還必須標識父對象的名稱才能正常工作。
此代碼不僅會複製屬性,還會複製關係,包括相關對象及其屬性。它工作得很好。
希望這會有所幫助!
- (void)copyPropertiesFromObject:(NSManagedObject*)oldObject
toObject:(NSManagedObject*)newObject
parent:(NSString*)parentEntity {
NSString *entityName = [[oldObject entity] name];
NSArray *attKeys = [[[oldObject entity] attributesByName] allKeys];
NSDictionary *attributes = [oldObject dictionaryWithValuesForKeys:attKeys];
[newObject setValuesForKeysWithDictionary:attributes];
//END:copyPropertiesFromObjectProperties
//START:copyPropertiesFromObjectRelationships
id oldDestObject = nil;
id temp = nil;
NSDictionary *relationships = [[oldObject entity] relationshipsByName];
for (NSString *key in [relationships allKeys]) {
NSRelationshipDescription *desc = [relationships valueForKey:key];
NSString *destEntityName = [[desc destinationEntity] name];
if ([destEntityName isEqualToString:parentEntity]) continue;
if ([desc isToMany]) {
NSMutableSet *newDestSet = [NSMutableSet set];
for (oldDestObject in [oldObject valueForKey:key]) {
temp = [[self lookup] objectForKey:[oldDestObject objectID]];
if (!temp) {
temp = [self associateObject:oldDestObject
parent:entityName];
}
[newDestSet addObject:temp];
}
[newObject setValue:newDestSet forKey:key];
} else {
oldDestObject = [oldObject valueForKey:key];
if (!oldDestObject) continue;
temp = [[self lookup] objectForKey:[oldDestObject objectID]];
if (!temp) {
temp = [self associateObject:oldDestObject
parent:entityName];
}
[newObject setValue:temp forKey:key];
}
}
}
這:
- (id)associateObject:(NSManagedObject*)object parent:(NSString*)name {
NSManagedObjectContext *moc = [self mainContext];
NSString *entityName = [[object entity] name];
id temp = nil;
if ([entityName isEqualToString:@"Title"]) {
temp = [NSEntityDescription insertNewObjectForEntityForName:entityName
inManagedObjectContext:moc];
[[self lookup] setObject:temp forKey:[object objectID]];
[self copyPropertiesFromObject:object toObject:temp parent:name];
return temp;
}
if ((temp = [self objectOfType:entityName
withName:[object valueForKey:@"name"]])) {
[[self lookup] setObject:temp forKey:[object objectID]];
return temp;
}
temp = [NSEntityDescription insertNewObjectForEntityForName:entityName
inManagedObjectContext:moc];
[[self lookup] setObject:temp forKey:[object objectID]];
[self copyPropertiesFromObject:object toObject:temp parent:name];
return temp;
}
你嘗試過什麼?你有多遠?具體問題得到更好的答案。 – PengOne 2011-06-09 16:39:41
我的rootview tableview列出了產品名稱,然後從中選擇產品名稱,彈出詳細的產品表格視圖,我可以在其中編輯該產品的任何單個屬性,該屬性彈出編輯控制器以進行任何屬性編輯。我只是不知道該從何處開始或着手從該詳細tableview中添加克隆/保存功能。 – EEE 2011-06-09 17:43:30