проблема с NSMutableArray - PullRequest
       6

проблема с NSMutableArray

0 голосов
/ 26 июня 2011

Я объявил массив NSMutable и присвоил ему некоторые значения.

.h
NSMutableArray *imageDetailsFromCategory;

@property (nonatomic, retain) NSMutableArray *imageDetailsFromCategory;

.m
@synthesise imageDetailsFromCategory

в ViewDidLoad:

imageDetailsFromCategory = [[NSMutableArray alloc]init];

//assigning object to Array..working fine.showing two images.
imageDetailsFromCategory = [self  getImageDetailsFromCategory:generatedString];

У меня была одна проблема, которая теперь решена.у меня проблема в том, что я передаю этот массив в StaticCategoryWithMultiImagePopOver class.

StaticCategoryWithMultiImagePopOver *staticCategoryWithMultiImagePopOver = [[StaticCategoryWithMultiImagePopOver alloc] init];

[staticCategoryWithMultiImagePopOver setParentImageDetailsArray:imageDetailsFromCategory];

в StaticCategoryWithMultiImagePopOver.h

NSMutableArray *nsmResult;
@property (nonatomic,retain)NSMutableArray *nsmResult;

.m

@synthesize nsmResult

-(void)setParentImageDetailsArray:(NSMutableArray *)imageDetailsFromCategoryFromParent{
    nsmResult=[[NSMutableArray alloc] init];
    nsmResult=[imageDetailsFromCategoryFromParent retain];

    }

переданный массив содержит объект класса с некоторыми строковыми переменными в каждом индексе.

, поэтому я получаю это через код:

- (UITableViewCell *)tableView:(UITableView *)tableView15 cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";


    UITableViewCell *cell = [tableView15 dequeueReusableCellWithIdentifier:CellIdentifier];
    // if (cell == nil) {
    // cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
    // }
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }
    NSFileManager *fileManager = [NSFileManager defaultManager];//create instance of NSFileManager


    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); //create an array and store result of our search for the documents directory in it


    NSString *documentsDirectory = [paths objectAtIndex:0];

    SymbolTalkEntry *symbolTalkEntry = [[SymbolTalkEntry alloc]init];

    symbolTalkEntry =[nsmResult objectAtIndex:indexPath.row];

    NSString *imageNme = symbolTalkEntry.fileName; // *this line*

вышеприведенная строка получает ошибку.

массив показывает количество, но объекты находятся вне области видимости ... не могут получить значения ...

может кто-нибудь сказать мне, как я могу получить к нему доступ ... могу ли я знать, что этопроблема со мной ...

cellForRowAtIndexPath (работает нормально)

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView15 cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";


    UITableViewCell *cell = [tableView15 dequeueReusableCellWithIdentifier:CellIdentifier];
    // if (cell == nil) {
    // cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
    // }
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }
    NSFileManager *fileManager = [NSFileManager defaultManager];//create instance of NSFileManager


    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); //create an array and store result of our search for the documents directory in it


    NSString *documentsDirectory = [paths objectAtIndex:0];

    SymbolTalkEntry *symbolTalkEntry = [[SymbolTalkEntry alloc]init];

    symbolTalkEntry =[nsmResult objectAtIndex:indexPath.row];

    NSString *imageNme = symbolTalkEntry.fileName;

    [symbolTalkEntry release];
    //Display image from app bundle
    NSString *path = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png",imageNme]]; 

    cell.imageView.image= [UIImage imageWithContentsOfFile:path]; 
    return cell;


}

-(NSInteger)number

Ответы [ 2 ]

3 голосов
/ 26 июня 2011

Это

nsmResult=[[NSMutableArray alloc] init];
nsmResult=[imageDetailsFromCategoryFromParent retain];

и это

SymbolTalkEntry *symbolTalkEntry = [[SymbolTalkEntry alloc]init];
symbolTalkEntry =[nsmResult objectAtIndex:indexPath.row];

- утечки памяти.

О вашей проблеме: объект, который вы получите

symbolTalkEntry =[nsmResult objectAtIndex:indexPath.row];

, похоже, не имеет свойства fileName.

Думаю, вам следует прочитать хорошую книгу об Objective-C и какао.

0 голосов
/ 27 июня 2011

На самом деле это проблема класса, который находится внутри массива.

Я изменил свой класс следующим образом:

#import <Foundation/Foundation.h>


@interface SymbolTalkEntry : NSObject {

 int categoryId;
 NSString *runModeType;
 NSString *sceneCategory;
 NSString *fileName;
 int isDefault;
 int sortX;
 int pathId;// 0 for appbundle 1 for document directry


}
@property (nonatomic, retain)NSString *runModeType;;
@property (nonatomic, retain)NSString *sceneCategory;
@property (nonatomic, retain)NSString *fileName;

-(id)init;

-(void) setCategoryId:(int) ctgId;
-(int)categoryId;

-(void) setRunModeType:(NSString *)rmType;
-(NSString *) runModeType;

-(void) setSceneCategory:(NSString *)scCategory;
-(NSString *) sceneCategory;

-(void) setFileName:(NSString *)Flname;
-(NSString *) fileName;

-(void) setIsDefault:(int) isDeft;
-(int)isDefault;

-(void) setSortX:(int) srtX;
-(int)sortX;

-(void) setPathId:(int) srtX;
-(int)pathId;
@end
[5:05:00 AM] Shamsudheen TK: #import "SymbolTalkEntry.h"


@implementation SymbolTalkEntry
@synthesize runModeType;
@synthesize sceneCategory;
@synthesize fileName;


-(id) init{
 categoryId = 0;
 runModeType = @"";
 sceneCategory =@"";
 fileName = @"";
 isDefault = 0;
 sortX =0;
 pathId =0;
 return self;
}
-(void) setCategoryId:(int) ctgId{
 categoryId = ctgId;
}
-(int)categoryId{
 return categoryId;
}

-(void) setRunModeType:(NSString *)rmType{

 if (runModeType != rmType) {  
  [runModeType release ];
  runModeType = [rmType retain];
 }
}
-(NSString *) runModeType{
 return runModeType;
}

-(void) setSceneCategory:(NSString *)scCategory{

 if (sceneCategory != scCategory) {
  [sceneCategory release];
  sceneCategory = [scCategory retain];
 }
}
-(NSString *) sceneCategory{
 return sceneCategory;
}

-(void) setFileName:(NSString *)Flname{

 if (fileName != Flname) {
  [fileName release];
  fileName = [Flname retain];
 }
}
-(NSString *) fileName{
 return fileName;
}

-(void) setIsDefault:(int) isDeft{
 isDefault = isDeft;
}
-(int)isDefault{
 return isDefault;
}

-(void) setSortX:(int) srtX{
 sortX =srtX;
}
-(int)sortX{
 return sortX;
}

-(void) setPathId:(int) srtX{
 pathId = srtX;
}
-(int)pathId{
 return pathId;
}

-(void)dealloc{
 [categoryId release];
 [runModeType release];
 [sceneCategory release];
 [fileName release];
 [isDefault release];
 [sortX release];
 [pathId release];
}
@end

и установите значения с помощью методов набора, которые я написал (например: [classobj setCategoryId:1]).

теперь выход за рамки решен .....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...