2015-12-14 64 views
3

我有檢查時,一個問題,如果有一個從數據庫來的東西:如何解決這個「指標0超越界限空陣!」

代碼:

hourPrograma: @"12:00"; 
NSArray *hourLinha = [hourProgram componentsSeparatedByString:@":"]; 

NSArray * test = [notificationDAO selectHourMin:[hourLinha[0] intValue]:[hourLinha[1] intValue]]; 

if (!test[0]) { 
    NSLog(@"ok!!!"); 
} else { 
    NSLog(@"empty!!!"); 
} 

我的查詢:

-(NSArray *) selectHourMin:(NSInteger *) hour: (NSInteger *) min { 
    query = [NSString stringWithFormat:@"SELECT hour, min FROM notification WHERE %i = hour AND %i = min", hour, min]; 
    NSArray * resp = [self loadDataFromDB:query]; 
    return resp; 
} 

當我檢查它是否爲空或者是否返回了某個內容時,會顯示錯誤。

+3

你'if'說法是錯誤的。在所有情況下,您正在檢查第一個對象。如果沒有記錄而你的'test'對象是'nil'會怎麼樣。這會導致你正面臨的崩潰。 – Gandalf

+1

使用'Array'屬性'count'。 – dasdom

+1

順便說一句 - 你的方法被命名爲:'selectHourMin ::'。這是一個糟糕的命名慣例。你應該命名方法:''selectHour:andMin:'。 – rmaddy

回答

3

test[0]已經在試圖下標數組代替測試。你需要檢查的count屬性:

if (test.count) { 
    // ... 
} 
+0

thx !!!!成功了! –

5

[0]與

test.count > 0 
2

你需要檢查結果爲:

if (test.count > 0) 
{  
    NSLog(@"ok!!!"); 
} 
else 
{  
    NSLog(@"empty!!!"); 
} 

希望這會有所幫助。

-1

用正楷在功能:)

-(void) selectHourMin:(NSInteger *) hour: (NSInteger *) min success:(void (^)(NSArray *result))successBlock failure:(void (^)(NSString * error))failureBlock{ 
    query = [NSString stringWithFormat:@"SELECT hour, min FROM notification WHERE %i = hour AND %i = min", hour, min]; 
    NSArray * resp = [self loadDataFromDB:query]; 

    if (resp.count > 0) { 
     successBlock(resp); 
    }else{ 
    failureBlock(@"empty result"); 
    } 
} 

,並呼籲

hourPrograma: @"12:00"; 
NSArray *hourLinha = [hourProgram componentsSeparatedByString:@":"]; 

NSArray * test = [notificationDAO selectHourMin:[hourLinha[0] intValue]:[hourLinha[1] intValue]]; 

[self selectHourMin:1 :2 success:^(NSArray *result) { 
    NSLog(@"result: %@", result); 
} failure:^(NSString *error) { 
    NSLog(@"%@", error); 
}]; 
相關問題