Я ужасно долго сохраняю эти изменяемые массивы в NSUserDefaults.Я пробовал несколько способов сделать это, но просто не могу этого понять.Я попытался добавить словарь и его объекты, массив, затем словарь, словарь и фактические строки, которые содержит словарь, но, похоже, ничего из этого не работает.
Вот код, который я использую, чтобы попытаться сохранить их по умолчанию для моих пользователей ...
- (void)statusesReceived:(NSArray *)statuses forRequest:(NSString *)connectionIdentifier
{
//tweets = [[NSMutableArray alloc] init];
for(NSDictionary *d in statuses) {
NSLog(@"See dictionary: %@", d);
Tweet *tweet = [[Tweet alloc] initWithTweetDictionary:d];
[tweets addObject:tweet];
[retweetCount addObject:tweet];
[authors addObject:tweet];
[avatarsURL addObject:tweet];
[friendsCount addObject:tweet];
[followerCount addObject:tweet];
[realNames addObject:tweet];
[userLocations addObject:tweet];
[statusesCounts addObject:tweet];
[favoriteCount addObject:tweet];
[tweet autorelease];
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setValuesForKeysWithDictionary:d];
[userDefaults setObject:tweets forKey:@"text"];
[userDefaults setObject:authors forKey:@"scree_name"];
[userDefaults synchronize];
NSLog(@"setting value");
NSArray *path = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,
NSUserDomainMask, YES);
NSLog(@"%@", path);
NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *setpath = [documentsDirectory
stringByAppendingPathComponent:@"PropertyList.plist"];
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath: setpath])
{
NSString *bundle = [[NSBundle mainBundle] pathForResource:@"PropertyList"
ofType:@"plist"];
[fileManager copyItemAtPath:bundle toPath: setpath error:&error];
}
}
[self.tableView reloadData];
}
И это то, что показывает NSLog и Dump
2011-06-10 03:13:28.773 ThemeCatcher[9173:707] *** -[NSUserDefaults setObject:forKey:]:
Attempt to insert non-property value '(
"<Tweet: 0x2b02c0>",
"<Tweet: 0x2c1ab0>",
"<Tweet: 0x4a9110>",
"<Tweet: 0x4b0e60>",
"<Tweet: 0x4ac440>",
"<Tweet: 0x2c69a0>",
"<Tweet: 0x2c58b0>",
"<Tweet: 0x49ad50>",
"<Tweet: 0x2c6b90>",
"<Tweet: 0x2c7be0>",
"<Tweet: 0x4979b0>",
"<Tweet: 0x49ee60>",
"<Tweet: 0x4b4ea0>",
"<Tweet: 0x2c9400>",
"<Tweet: 0x4b5080>",
"<Tweet: 0x2c9d20>",
"<Tweet: 0x2ca1d0>",
"<Tweet: 0x4b4a30>",
"<Tweet: 0x2caff0>",
"<Tweet: 0x4b55f0>"
)' of class '__NSArrayM'.
2011-06-10 03:13:28.775 ThemeCatcher[9173:707] *** -[NSUserDefaults setObject:forKey:]:
Attempt to insert non-property value '(
"<Tweet: 0x2b02c0>",
"<Tweet: 0x2c1ab0>",
"<Tweet: 0x4a9110>",
"<Tweet: 0x4b0e60>",
"<Tweet: 0x4ac440>",
"<Tweet: 0x2c69a0>",
"<Tweet: 0x2c58b0>",
"<Tweet: 0x49ad50>",
"<Tweet: 0x2c6b90>",
"<Tweet: 0x2c7be0>",
"<Tweet: 0x4979b0>",
"<Tweet: 0x49ee60>",
"<Tweet: 0x4b4ea0>",
"<Tweet: 0x2c9400>",
"<Tweet: 0x4b5080>",
"<Tweet: 0x2c9d20>",
"<Tweet: 0x2ca1d0>",
"<Tweet: 0x4b4a30>",
"<Tweet: 0x2caff0>",
"<Tweet: 0x4b55f0>"
)' of class '__NSArrayM'.
2011-06-10 03:13:28.786 ThemeCatcher[9173:707] setting value
2011-06-10 03:13:28.789 ThemeCatcher[9173:707] (
"/var/mobile/Applications/0628FF60-6D3E-4FCA-A6F2-DFB8FC04EF6A/Library"
)
Буду очень признателен за любые предложения
Спасибо. Я прочитал документы и действительно несколько раз пытался их изучить, но это действительно расплывчато.Пример, который они приводят, не совсем соответствует моим критериям или целям, и я все еще ищу решение.Я реализовал NSCoding в файле Tweet.m, но не уверен, как реализовать это в моем контроллере, где установлены мои NSUserDefaults ... вот код, который я использую для кодирования объектов, но как я должен сказать объектам, когдасохраняя они были закодированы?
В файле .h я просто
@property (assign, readwrite) NSString*tweet;
@property (assign, readwrite) NSString*author;
В файле .m
- (void)encodeWithCoder:(NSCoder *)encoder
{
//Encode properties, other class variables, etc
[encoder encodeObject:self.tweet forKey:@"text"];
[encoder encodeObject:self.author forKey:@"screen_name"];
}
- (id)initWithCoder:(NSCoder *)decoder
{
self = [super init];
if( self != nil )
{
//decode properties, other class vars
self.tweet = [decoder decodeObjectForKey:tweet];
self.author = [decoder decodeObjectForKey:author];
}
return self;
}