2010-09-30 1 views
0

Я использую следующий код для заполнения массива из моего ManagedObjectContext, но то, что я хотел бы сделать, - это получить только уникальные идентификационные номера каждой строки, соответствующие моему запросу (itemType = 1) и заполнить массив fetchResults только этими уникальными идентификационными номерами. Это возможно? Любая помощь приветствуется. LQИзвлечь только столбец UniqueID и заполнить массив

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 

[request setEntity:[NSEntityDescription entityForName:@"MyAppName" 
       inManagedObjectContext:[self managedObjectContext]]]; 

NSError *error = nil;           
NSPredicate *predicate; 
NSArray *fetchResults; 
predicate = [NSPredicate predicateWithFormat:@"(itemType = %i)", 1];    
[request setPredicate:predicate]; 
fetchResults = [managedObjectContext executeFetchRequest:request error:&error]; 

if (!fetchResults) { 
     // NSLog(@"no fetch results error %@", error); 
} 

self.mutableArrayName = [NSMutableArray arrayWithArray:fetchResults]; 
[request release]; 

ответ

0

Чтобы помочь кому-либо с аналогичными потребностями, я отвечаю на свой вопрос. Я выяснил решение, которое работает для вытягивания определенных данных строки и/или столбца из моей базы данных SQLite в форме запроса, а не с использованием Fetch with Predicate. (Примечание:. Примеры кода для извлечения типов данных строки и целые)

Во-первых, добавить рамки для libsqlite3.0.dylib

В заголовке добавить следующий файл:

#import <sqlite3.h> 

@interface MyViewController : UIViewController { 
NSMutableArray *dataArray; // This array will hold data you will extract 
NSArray  *summaryArray; // This holds an array of PKIDs that will be queried 
} 

@property (nonatomic, retain) NSMutableArray *dataArray; 
@property (nonatomic, assign) NSArray *summaryArray; 

- (void)getData:(NSInteger *)intPKID; 
- (NSString *) getDBPath; 

@end 

В файл реализации добавить следующее:

static sqlite3 *database = nil; // add this before the @implementation line 

@synthesize dataArray; 
@synthesize summaryArray; 

- (NSString *) getDBPath {            
     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES); 
     NSString *documentsDir = [paths objectAtIndex:0]; 
     return [documentsDir stringByAppendingPathComponent:@"MyDatabaseName.sqlite"]; 
} 


- (void)getData:(NSInteger *)intPKID {       

     NSString *dbPath = [self getDBPath]; 

     if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) { 

      NSString *strSQL; 
      NSString *strExtractedData; 
      NSUInteger count; 
      NSInteger intPK; 

      if (self.dataArray == nil) { 
       self.dataArray = [[[NSMutableArray alloc] init] autorelease]; 
      } else { 
       [self.dataArray removeAllObjects];   
      } 

      count = [self.summaryArray count]; 

      for (NSUInteger i = 0; i < count; ++i) { 

       // Extract a specific row matching a PK_ID: 
       strSQL = [NSString stringWithFormat: @"select intPKID, strColumnName from MyDatabaseName where (PKID = %i)", [[self.summaryArray objectAtIndex:i]intValue]]; 

       // Extract a range of rows matching some search criteria: 
       // strSQL = [NSString stringWithFormat: @"select intPKID, strColumnName from MyDatabaseName where (ITEMTYPE = '%i')", 1]; 

       const char *sql = (const char *) [strSQL UTF8String]; 

       sqlite3_stmt *selectstmt; 

       if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK) { 

         while(sqlite3_step(selectstmt) == SQLITE_ROW) { 

          [self.dataArray addObject:[NSNumber numberWithInt:qlite3_column_int(selectstmt, 0)]]; 

          [self.dataArray addObject:[NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 1)]]; 

         } 
       } 
      } 
     } else { 
      sqlite3_close(database);  // Database not responding - close the database connection 
     } 
} 
0
predicate = [NSPredicate predicateWithFormat:@"itemType == 1"]; 

или

predicate = [NSPredicate predicateWithFormat:@"(itemType == %i)", 1];

должны оба работают.

+0

Мой вопрос был о том, чтобы добавить список уникальных идентификаторов из всех строк, соответствующих моему предикату запроса. Это не дает уникальные идентификаторы? Он создает очень длинную строку, которая выглядит как ссылка на данные строки. –