![](/img/trans.png)
[英]How to access the original video using UIImagePickerController or other alternative methods?
[英]How to access dictionaries within other methods?
下面是我用來嘗試通過另一種方法訪問初始化字典的代碼:
#import "UserFoodData.h"
@implementation UserFoodData
-(void)loadUserFoodData{
NSString *appDataPath = [[NSBundle mainBundle] pathForResource:@"UserFoodData" ofType:@"plist"];
NSMutableDictionary *userFoodDictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:appDataPath];
for (userFoodDictionary in userFoodDictionary){
NSLog(@"%@", userFoodDictionary);
}
}
-(void)setName:(NSString *)foodName andCarbs:(NSNumber *)carbAmount{
[userFoodDictionary setObject:foodName forKey:foodName];
}
@end
我似乎收到的錯誤消息是:使用未聲明的標識符'userFoodDictionary'
現在我認為是錯誤的,因為編譯器認為setName:andCarbs方法有可能只能在初始化應用程序主屏幕時調用的loadUserFoodData之前執行。 有人可以幫我解決問題嗎?
我似乎收到的錯誤消息是:
使用未聲明的標識符“ userFoodDictionary”
編譯器說:
1.我沒有在本地看到任何變量,例如userFoodDictionary或-(void)setName:(NSString *)foodName和Carbs:(NSNumber *)carbAmount中的實例變量。
2.但是您正在嘗試訪問它。
and also your for loop has mistakes. please verify my answer
編譯器正在嘗試在“ UserFoodData”類中查找userFoodDictionary。 因為您要在loadUserFoodData方法之外訪問userFoodDictionary。 因此,為了訪問本地方法之外的內容,必須將該引用保留在頭文件中,然后可以在類中的任何位置訪問它。
@interface UserFoodData : NSObject
@property(nonatomic,retain)NSMutableDictionary *userFoodDictionary;
@end
#import "UserFoodData.h"
@implementation UserFoodData
//@synthesize userFoodDictionary; synthesise is automatically entered by compiler
-(void)loadUserFoodData{
NSString *appDataPath = [[NSBundle mainBundle] pathForResource:@"UserFoodData" ofType:@"plist"];
self.userFoodDictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:appDataPath];
//Please not down this
for (id aFood in userFoodDictionary){
NSLog(@"%@", aFood);
}
}
-(void)setName:(NSString *)foodName andCarbs:(NSNumber *)carbAmount{
[self.userFoodDictionary setObject:foodName forKey:foodName];
}
@end
我假設您在發布的第二種方法中遇到了錯誤。
- (void)setName:(NSString *)foodName andCarbs:(NSNumber *)carbAmount{
[userFoodDictionary setObject:foodName forKey:foodName];
}
該方法未定義userFoodDicitionary
。 如果您希望字典在方法調用之間持久存在,請將其存儲在@property
。
您應該真正閱讀了Objective-C的入門資料,您可以從這份Apple文檔開始
這里有多個問題...
一方面,您的for循環有一個語法錯誤……不僅如此,而且您正嘗試通過一個名為userFoodDictionary
的字典進行迭代, userFoodDictionary
使用一個迭代器變量也稱為userFoodDictionary
。 更改為類似:
for (id dictKey in userFoodDictionary) {
NSLog(@"%@", dictKey);
}
您還試圖訪問超出范圍的變量。 userFoodDictionary
在loadUserFoodData
的范圍內聲明。 該方法完成后,將釋放該變量,因此您當然不能在setName:andCarbs:
訪問它。 為此,您需要在更廣泛的范圍內進行定義-創建屬性,靜態變量,iVar等。
這里缺少許多OOP概念...如果您是編程的新手,那么Objective-C是一個很難入門的地方,它可能會使您陷入很多循環(雙關語)。
嘗試這個...
#import "UserFoodData.h"
@implementation UserFoodData
-(void)loadUserFoodData{
NSString *appDataPath = [[NSBundle mainBundle] pathForResource:@"UserFoodData" ofType:@"plist"];
NSMutableDictionary *userFoodDictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:appDataPath];
for (userFoodDictionary in userFoodDictionary){
NSLog(@"%@", userFoodDictionary);
}
}
-(void)setName:(NSString *)foodName andCarbs:(NSNumber *)carbAmount{
NSString *appDataPath = [[NSBundle mainBundle] pathForResource:@"UserFoodData" ofType:@"plist"];
NSMutableDictionary *userFoodDictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:appDataPath];
[userFoodDictionary setObject:foodName forKey:foodName];
}
@結束
讓我知道是否有幫助... :)
我認為問題是您的NSMutableDictionary應該是在.h中聲明為NSMutableDictionary的ivar,如下所示
NSMutableDictionary *userFoodDictionary
在.m中
-(void)loadUserFoodData{
NSString *appDataPath = [[NSBundle mainBundle] pathForResource:@"UserFoodData" ofType:@"plist"];
userFoodDictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:appDataPath];
for (userFoodDictionary in userFoodDictionary){
NSLog(@"%@", userFoodDictionary);
}
}
-(void)setName:(NSString *)foodName andCarbs:(NSNumber *)carbAmount{
[userFoodDictionary setObject:foodName forKey:foodName];
}
所以問題在下面的行中
for (userFoodDictionary in userFoodDictionary){
NSLog(@"%@", userFoodDictionary);
}
替換為
for (NSMutableDictionary *userFoodDic in userFoodDictionary){
NSLog(@"%@", userFoodDic);
}
可以解決您的問題
好,也有其他問題
請也將userFoodDictionary
聲明為屬性之一,如@Sebastian在其回答中所述:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.